- PVSM.RU - https://www.pvsm.ru -
Привет Мир! По просьбам заинтересованных в GraphQL, подготовил full-stack пример с авторизацией, регистрацией, личным профилем, изменением и удалением данных.
Для начала, расскажу из чего он состоит и что у него под капотом:
Под капотом приложения:
5 минут вам хватит на быстрое прочтение и 1 час на понимание. Готовый репозиторий [1] Github.
Пример разделен на 3 основных блока, в которых бизнес логика полностью соответствуют действиям пользователя.
Весь материал основан на предыдущих статьях с доработкой:
При регистрации выполняется обычная GraphQL мутация, с одним нюансом. Перед сохранением, пароль шифруется [4]. Алгоритм шифрования SHA3 512.
Аутентификацию не путать с авторизацией.
Аутентификация—проверка подлинности пользователя.
Авторизация — выдача прав пользователю.
Для аутентификации используется JSON Web Token (JWT). Это замена кукисам и сессиям. Я сделаю акцент на основных моментах JWT в контексте статьи. Более подробно вы можете ознакомится на главном сайте [5] проекта.
JWT имеет 2 алгоритма HS and RS:
Пример использует HS256:
В моей реализации:
Пусть вас не смущает слово key. В примере нет ключей, только токены. Это мои личные предпочтения, для себя вы можете выбрать любые название пары.
Для реализации безопасности использую разные подходы. Я выбрал следующий:
Так, после успешной аутентификации, пользователю возвращается [6] public_key и id, которые записываются в localstorage. Пока пользователь не закроет браузер, public_key будет валиден или не произойдет logout.
Обычно public_key или access token отправляет в headers вместе с каждым запросом. Apollo GraphQL позаботилось о механизме обмена ключей между клиентом и сервером через websockets.
С каждым запросом на сервер отправляется [9] public_key. При ошибке [10] произойдет logout.
Доступ к персональным данным осуществяется только после проверки public_key на сервере.
Профиль пользователя и страница настроек похожи. Они оба требуют аутентификацию пользователя. Различия в осуществляемых операциях:
Это базовый пример. Его можно доработать:
Для меня это дебютная статья. На момент ее написание было 30 дней с начала моего знакомства с миром node.js.
Если у вас имеются вопросы, пожелания, предложение темы GraphQL, пишите в комментариях. Я их обязательно рассмотрю.
Спасибо за внимание.
Автор: Никита Марций
Источник [11]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/javascript/254599
Ссылки в тексте:
[1] репозиторий: https://github.com/nikitamarcius/graphql-authentication-register-profile
[2] GraphQL сервер с Koa2 и MongoDB: https://habrahabr.ru/post/327816/
[3] GraphQL subscriptions для real-time приложения: https://habrahabr.ru/post/327941/
[4] шифруется: https://github.com/nikitamarcius/graphql-authentication-register-profile/blob/master/test-server/src/data/user/mutations.js#L76
[5] главном сайте: https://jwt.io/introduction/
[6] возвращается: https://github.com/nikitamarcius/graphql-authentication-register-profile/blob/master/test-client/src/components/auth/login.vue#L40
[7] клиенте: http://dev.apollodata.com/react/subscriptions.html#authentication
[8] сервере: http://dev.apollodata.com/tools/graphql-subscriptions/authentication.html
[9] отправляется: https://github.com/nikitamarcius/graphql-authentication-register-profile/blob/master/test-client/src/main.js#L21
[10] ошибке: https://github.com/nikitamarcius/graphql-authentication-register-profile/blob/master/test-client/src/main.js#L24
[11] Источник: https://habrahabr.ru/post/328142/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best
Нажмите здесь для печати.