Я создаю приложение django с бэкэндом API (с DRF) и клиентом angularjs. Моя цель - полностью отключить сервер и клиент, используя JWT вместо сеансов. Я пытаюсь интегрировать python-social-auth (PSA) с django-rest-framework-jwt (DRFJWT), поэтому мой Цель состоит в том, чтобы иметь что-то для этого:
Журналы пользователя с электронной почтой /facebook через angular client → форму сообщений клиента в URL-адрес PSA → Вход в систему PSA/создание пользователя → [!] DRFJWT создает токен, который затем отправляет обратно в клиентский → токен хранит клиента локальное хранилище затем использует токен для каждого запроса
[!]: В настоящее время я боюсь. Я думаю, что я могу изменить метод do_complete в PSA, например,
from rest_framework_jwt.utils import jwt_payload_handler, jwt_encode_handler
def do_complete(backend, login, user=None, redirect_name='next',
*args, **kwargs):
# pop redirect value before the session is trashed on login()
data = backend.strategy.request_data()
redirect_value = backend.strategy.session_get(redirect_name, '') or \
data.get(redirect_name, '')
is_authenticated = user_is_authenticated(user)
user = is_authenticated and user or None
partial = partial_pipeline_data(backend, user, *args, **kwargs)
if partial:
xargs, xkwargs = partial
user = backend.continue_pipeline(*xargs, **xkwargs)
else:
user = backend.complete(user=user, *args, **kwargs)
if user_is_active(user):
# catch is_new/social_user in case login() resets the instance
is_new = getattr(user, 'is_new', False)
social_user = user.social_user
login(backend, user, social_user)
payload = jwt_payload_handler(user)
return { 'token': jwt_encode_handler(payload) }
Это единственный способ сделать то, что я пытаюсь выполнить?
Мне также интересно, хорошо ли с точки зрения лучшей практики использовать сеансы для управления конвейером и JWT для auth?