Сессия не сохраняет переменные - Django - PullRequest
1 голос
/ 07 мая 2020

У меня возникли проблемы с сохранением токенов во время сеанса. Я нашел несколько решений по stackoverflow, но ни одно из них не сработало.

в настоящее время я храню токен пользователя, когда клиент отправляет запрос POST на / api / login

, а вот мои просмотры logi c

request.session['token'] = auth.token.key
request.session.modified = True
  • Я на 100% уверен, что auth.token.key не None, и logi c хранится нормально.

но когда дело доходит до / api / update (какой-то пример API), я всегда получаю None

вот как я получаю элемент из сеанса:

print(request.session.get('token'))

** Код выше всегда возвращает None * *

Я читал Django документы. Я установил промежуточное программное обеспечение сеанса и приложение сеанса:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'rest_framework.authtoken',
    'user'
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

AUTHENTICATION_BACKENDS = (
        'user.auth.AuthBackend',
        'django.contrib.auth.backends.RemoteUserBackend',
        'django.contrib.auth.backends.ModelBackend',
)

Я выполнил все миграции. django_session таблица существует.

EDITED:

вид входа:

  • У меня есть бэкэнд аутентификации клиента
@api_view(['POST'])
def login(request):

    # convert json data into dictionary
    data = get_data(request)

    print(request.session.get('token'))

    auth = authenticate(
        email = data['email'],
        password = data['password']
    )

    if auth:
        # store user's token into sesion
        request.session['token'] = auth.token.key
        print(request.session['token'])

        user = UserModelSerializer(auth.user)

        return Response(
            user.data,
            status = status.HTTP_200_OK
        )

    else:

        return Response(
            message("user doestn't exist | incorrect password"),
            status = status.HTTP_403_FORBIDDEN
        )

Обновить вид (где я не могу получить данные сеанса):

@api_view(['POST'])
def update(request):
    print(request.session.get('token'))
    return Response("its ok.")
...