Задать вопрос
@Keksonov

Как реализовать регистрацию в RESTful приложении?

Нужно реализовать регистрацию. Также на frontend отслеживать, залогинен ли пользователь и его группу (администратор, пользователь)
  • Вопрос задан
  • 485 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
r0zh0k
@r0zh0k
Site Reliability Engineer
Регистрация:
POST /api/signup, в тело запроса передается емейл/логин и пароль + нужные вам пользовательские данные. Сторите это дело в базу, пароль конечно же хешируете bcryptом.

Логин:
POST /api/login, в тело запроса передается логин и пароль. Достаете пользователя из базы, хешируете пароль, сравниваете с сохраненным. Если не ок – 401 до свидания, если ок:

Генерируете JWT токен, в токен записываете логин и роли, ставите дату протухания. Токен обязательно подписывается HS256 или сильнее.
Токен ставите в респонс в хидер X-Auth-Token или возвращаете в респонсе или еще как угодно. Кроме этого возвращаете на фронт его роли чтобы фронт знал что надо рисовать.

Фронтенд сохраняет токен в печенье или локалсторедж и передает с каждым запросом.

На каждый запрос вы
1. Смотрите есть ли токен в хидере. Если нет – 403.
2. Валидируете его (обязательно ставите сами алгоритм подписи, а не берете из самого токена), и смотрите не протух ли. Если невалидный или протух – 403.
3. Достаете оттуда емейл и роли. Смотрите, доступен ли ваш эндпоинт этим ролям. Если нет – 403.
4. ...
5. PROFIT!

Время от времени токен надо рефрешить. Еще можно в токен напимер записывать ІР пользователя и кучу другой полезной информации.

Ключевые слова для гугления – JWT auth, даже не знаю что еще добавить.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
gibson_dev
@gibson_dev
Передавать статус пользователя в изначальном html (инлайн js), либо запрашивать с фронтенда при инициализации приложения. А регистрация и авторизация ничем не отличается, ну разве что ходит ajax'ом к апи. Просто по факту ее свершения возвращается json например с необходимыми данными
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы