Задать вопрос
  • Как сделать чтобы git не видел .idea?

    27cm
    @27cm
    TODO: Написать статус
    Для начала удалите папку из git: git rm -r --cached .idea

    В .gitignore должно быть просто .idea/ без звёздочки. Пример.

    Кстати, для .gitignore в PhpStorm есть плагин.

    Если сделать, как посоветовал Назар Мокринский, то файлы будут игнориться только при работе с git через PhpStorm, что в общем-то серьёзное ограничение. Тогда уж лучше использовать .git/info/exclude, но все эти способы отказаться от gitignore, скажем так, не пользуются популярностью.
    Ответ написан
    2 комментария
  • Как сделать чтобы git не видел .idea?

    nazarpc
    @nazarpc
    Open Source enthusiast
    Папка .idea это ваше локальное окружение, оно в репозитории упоминаться не должно, не нужно его засовывать в .gitignore.
    Вот что нужно сделать:
    d4cbe31f7e4147a8ab3ae319c639fb93.pngedaf451152dd4a79b82e9d394b0da31f.png
    Ответ написан
    4 комментария
  • Как привязать footer к низу экрана в Twitter Bootstrap?

    Sergei_Erjemin
    @Sergei_Erjemin
    Улыбайся, будь самураем...
    Блин… что за советы… там есть встроенный класс: navbar-fixed-bottom

    <div class="navbar-fixed-bottom row-fluid">
          <div class="navbar-inner">
              <div class="container">
    
    Ответ написан
    7 комментариев
  • Как правильно спроектировать сайт на react + node js?

    @montecazazza
    Node, GraphQL, React
    https://github.com/facebookincubator/create-react-app - с этого можно начать, чтобы не заморачиваться со сборщиком и настройкой. Можно легко начать и фронт и бэк.
    https://github.com/styled-components/styled-components - это добавить для стилей - ИМХО самый удобный вариант
    Ну роутер и прочее что необходимо по ходу будет.
    Вообще не очень понятно зачем React если не SPA.
    Ответ написан
    Комментировать
  • Как реализовать авторизацию пользователя на стеке React Redux Node?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Пригодится jwt. (гугл)

    В общих словах: вам нужно выдать юзеру токен. С этим токеном юзер будет выполнять запросы к вашим защищенным методам api (вы можете оставить какие-то методы "без токена").

    Node.js часть
    Пример роута на логин (сделано не лучшим образом, в плане коллбэков, но что нашлось под рукой...):

    auth.js
    ...
    const v4 = require('node-uuid').v4
    const jwt = require('jsonwebtoken')
    ...
    router.post('/signin', (req, res, next) => {
    
      // валидация, например... 
    
      if (errors) {
        return res.status(400).json({ errors })
      } else {
        // поиск юзера в базе, сравнение хэша и прочие необходимые операции
        ...
       // допустим все ок, нужно ответить токеном
      // генерируем необходимые опции и сам токен
    
            const payload = {
              _id: user._id,
              iss: 'http://localhost:3000',
              permissions: 'poll',
            }
            const options = {
              expiresIn: '7d',
              jwtid: v4(),
            }
            const secret = new Buffer(process.env.AUTH0_CLIENT_SECRET, 'base64')
            jwt.sign(payload, secret, options, (err, token) => {
              // отвечаем токеном, для будущих запросов с клиента
              return res.json({ data: token })
            })
         ...
    })
    
    module.exports = router;


    Пример защищенного роута (метода, который требует токен):
    ...
    const jwt = require('jsonwebtoken')
    const Poll = require('../models/poll')
    ...
    
    const requireToken = (req,res,next) => {
      const token = req.headers['x-api-key']
      const secret = new Buffer(process.env.AUTH0_CLIENT_SECRET, 'base64')
    
      jwt.verify(token, secret, (err, decoded) => {
        if (err) {
          return res.status(401).json({ error: err.message })
        }
        req.params.userId = decoded._id
        next()
      })
    }
    ...
    
    // обратите внимание на requireToken - функция вызывается при каждом обращении к роуту
    // то есть при каждом PUT запросе по адресу (например: PUT api/v1/products/1238914)
    // будет вызываться requireToken
    
    router.put('/:id', requireToken, (req, res, next) => {
      const { productId } = req.body
      const userId = req.params.userId
    
      Poll.findById(req.params.id)
        .populate({ path: 'products' })
        .exec((err, poll) => {
            // ... необходимые действия в базе, в процессе успешного зачтения голоса...
        }
    })


    Клиентское приложение:

    Типичный ActionCreator (в качестве библиотеки для запросов можно взять bluebird, isomorphic-fetch, да хоть нативный xhr)
    actions/LoginActions.js

    export function login(data) {
      return dispatch => {
        dispatch({ type: LOGIN_REQUEST })
    
        // request в данном случае - https://github.com/KyleAMathews/superagent-bluebird-promise
        return request.post(`${API_ROOT_V1}/auth/signin`)
          .send(data)
          .then(res => {
            if (!res.ok) {
              dispatch({ type: LOGIN_FAILURE })
            } else {
              dispatch({
                type: LOGIN_SUCCESS,
                data: res.body.data,
              })
              //сохранение токена в localStorage
              localStorage.setItem('cks_token', res.body.data)
            }
          }, err => {
            dispatch({ type: LOGIN_FAILURE })
          })
      }
    }


    Пример голосования с токеном (выше, в node.js части был метод апи, а это PUT запрос с клиента)

    export function vote(productId, voteId) {
      return dispatch => {
        dispatch({ type: POLL_VOTE_REQUEST })
    
        return request.put(`${API_ROOT_V1}/api/v1/vote/${voteId}`)
          .set('X-API-Key', localStorage.getItem('cks_token')) // установка ТОКЕНА в заголовок 'X-API-Key'
          .send({ productId })
          .then(res => {
            if (!res.ok) {
              dispatch({ type: POLL_VOTE_FAILURE })
            } else {
              dispatch({
                type: POLL_VOTE_SUCCESS,
                data: normalize(res.body.data, schema.poll),
              })
            }
          }, err => {
            dispatch({ type: POLL_VOTE_FAILURE })
          })
      }
    }


    Надеюсь код формы с кнопкой "голосовать" не трубется.
    ====

    Все это можно организовать удобнее, например, выставлять токен всем запросам автоматически (речь про клиентскую часть):
    import fetch from 'isomorphic-fetch'
    ...
    const defaultHeaders = {
      Accept: 'application/json',
      'Content-Type': 'application/json',
    }
    
    function buildHeaders() {
      const authToken = localStorage.getItem('TOKEN')
      return { ...defaultHeaders, Authorization: authToken }
    }
    ...
    export function httpPost(url, data) {
      const body = JSON.stringify(data)
    
      return fetch(url, {
        method: 'post',
        headers: buildHeaders(),
        body: body,
      })
      .then(... код оработки запроса ...)
    }


    ===

    Проверить наличие токена, можно с в роутере, с помощью хука на onEnter.

    root.js
    ...
    <Provider store={store}>
          <Router history={routerHistory}>
            {configRoutes(store)} // Роуты создаются функцией, чтобы можно было использовать внутри нее store.getState()
          </Router>
        </Provider>
    ...


    routes.js
    export default function configRoutes(store) {
      function _ensureAuthenticated(nextState, replace, callback) {
        const { dispatch } = store
        const { session } = store.getState()
        const { currentUser } = session
        let nextUrl
    
        if (!currentUser && localStorage.getItem('cks.token')) {
          dispatch(getCurrentAccount())
        } else if (!localStorage.getItem('cks.token')) {
          replace('/signin')
        }
        callback()
      }
    
      return (
        <Route path='/' component={App}>
          <Route path='/signin' component={SigninContainer} />
          <Route path='/signup' component={SignupContainer} />
    
          <Route path='/locked' component={AuthenticatedContainer} onEnter={_ensureAuthenticated}>
            <Route component={LockedArea}>
              <Route path='/locked/a' component={A} />
              <Route path='/locked/b/:id' component={B} />
              <Route path='/locked/c' component={C} />
            </Route>
          </Route>
        </Route>
      )


    Остается только создать AuthenticatedContainer в котором проверять: есть ли currentUser (в рамках этого примера) и если нет - возвращать false. А если есть - this.props.children (в которых будут дальнейшие роуты..)
    ===

    Итого:
    1) у вас есть API написанное на node.js.
    2) У этого API есть защищенные методы, которые проверяют наличия токена в http-запросе. Токен выдается при запросе на логин. Само собой, операция логина (то есть POST запрос на your-api/login) не требует токена.
    3) После удачного логина, вы получаете в ответе на свой запрос токен (это уже внутри клиентского кода, и если мы говорим о redux - то внутри асинхронного вызова в actions)
    4) Сохраняете токен (например, в localStorage)
    5) Во все необходимые http-запросы устанавливаете заголовок с токеном
    Ответ написан
    15 комментариев
  • Лучшие книги для изучения JavaScript в области разработки интерфейсов (Frontend)?

    evgeniy8705
    @evgeniy8705
    Повелитель вселенной
    Для чего составлять такую подборку? Вы просто перечислили практически все книги на русском по JS. При чем однотипные.
    Большинство из них описывают одно и тоже. Я прочитал почти все из этого списка. По опыту могу сказать, что читать всю подборку не нужно.
    Посоветовал бы прочитать книгу Ильи Кантора и книгу "Javascript для профессиональных веб-разработчиков", автор Николас Закас вроде.(Вместо второй можно прочитать Фленагана. Подробное руководство., но Заказ мне больше нравится, по моему мнению гораздо лучше объясняются многие вещи). Две эти книги, достаточно объемные и информативные, всю основу прекрасно преподносят.
    Также посоветовал бы книгу по оптимизации производительности, автор также Николас Закас и любую книгу по регулярным выражениям, но это уже после некоторой практики. А также книгу "Веб-приложения на JavaScript". Сам ее только вот начну читать, но по содержанию и отзывам достаточно хорошая.

    Достаточно будет чтобы довольно хорошо освоиться в языке.
    Не нужно читать однотипные книги. С 3 по 6 включительно пункты не стоит читать. Только зря потратите время.

    ООП объясняется в первых двух книгах которые я упомянул. Также книга про паттерны - largescalejs.ru/.

    Но главное не просто читать а повторять все примеры и выполнять все задания, попутно придумывания задания для себя самому. Чем больше практики, тем лучше будет откладываться информация в голове и будет намного лучшее понимание что да как.
    Я читать некоторые книги по несколько раз, потому что не сильно парился сначала о практике, просто читал, выполнял некоторые задания, по ходу было понятно, но через главу, уже все забывалось... Поэтому практикуйте, практикуйте и еще раз практикуйте.
    Удачи в обучении!
    Ответ написан
    Комментировать
  • Как сделать hover эффект на этой страничке?

    Elwen
    @Elwen
    Самое простое и быстрое - отказаться от скрытых блоков и менять фоновую картинку при наведении через :hover. По сути просто в css заменить .chm1 на .ch1:hover и т.д.
    Ответ написан
    Комментировать
  • Как эффективно изучать JS?

    Здесь были даны хорошие пошаговые рекомендации в виде задач https://toster.ru/answer?answer_id=649930
    Ответ написан
    Комментировать
  • Как эффективно изучать JS?

    @Scribblex
    Я рекомендую изучать JS примерно таким путем:
    – чтение learn.javascript.ru (чтение и, естественно, практика);
    – параллельное прохождение модулей по JS на codeschool;
    – держите перед глазами актуальные вопросы для собеседования JS-разработчика (habrahabr.ru/post/239065/), стараясь на них ответить;
    – читайте хороших авторов: Дуглас Крокфорд, Джон Рейзиг, Стоян Стефанов;
    – найдите на GitHub людей, которые согласятся ревьюить Ваш код, я серьезно!

    Ну и не забывайте: чем чаще Вы пишите код, тем лучше получается; чем сильнее стараетесь разобраться в основах языка, тем легче будут даваться в освоении фреймворки и паттерны.

    Желаю успеха!
    Ответ написан
    10 комментариев
  • Как эффективно изучать JS?

    iliapro
    @iliapro
    Веб-разработчик
    По опыту знаю, что учишь-учишь, но без опыта экспертом не станешь. Придумай себе какой-нибудь проект, в ходе работы будут появляться вопросы, придётся ползти в справочники или искать решение на форумах, только так сможешь выучить язык в совершенстве.
    Ответ написан
    6 комментариев
  • Как при перезагрузки страницы сохранять, то что кликнули (radio выбор)?

    @esvlad
    Веб-разработчик
    записывать в куки либо localStorage
    htmlbook.ru/html5/storage
    Ответ написан
    Комментировать
  • Какой тип УСН выбрать?

    opium
    @opium
    Просто люблю качественно работать
    все входит в расходы
    глупый вопрос
    посчитайте ваши доходы
    ваши расходы
    сумму налогов с 6 процентов оборота
    и 15 процентов с доходов минус расходов
    фирму переоткрывают каждые три года чтобы избежать плановой проверки налоговой
    в случае ип это маловероятно надо открывать ооо чтобы такое проворачивать
    Ответ написан
    Комментировать
  • Какой набор инструментов выбрать для реализации веб-проекта?

    zo0m
    @zo0m
    full stack developer
    Вот вам лайфхак:
    yeoman.io/generators

    устанавливайте разные генераторы, смотрите, пробуете, выбираете, что вам по душе и вперед :)
    Ответ написан
    Комментировать