Подтвердить что ты не робот

Как создать API для входа в систему с помощью Django Rest Framework?

Я хочу создать login api (или использовать существующий, если он уже предварительно упакован), используя фреймворк django rest. Однако я полностью в недоумении. Всякий раз, когда я отправляю запрос на отправку URL-адреса "login" в django rest, он просто отправляет обратно страницу просмотра страницы api...

МОЯ КОНФИГУРАЦИЯ

urls.py

url(r'^api/v1/', include('rest_framework.urls', namespace='rest_framework'))

settings.py

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.BasicAuthentication',
        'rest_framework.authentication.SessionAuthentication',
    )
}

ЧТО Я ХОЧУ

Запрос:

POST /api/v1/login  username='name' pass='pass'

Ответ:

200 OK "{username: 'name', 'userId': '54321'}" set-cookie: sessionid="blahblah"
4b9b3361

Ответ 1

Взгляните на вид api из django-rest-framework-jwt. Это реализация для создания токенов auth, а не сеансов cookie, но ваша реализация будет аналогичной. См. views.py и serializers.py. Вероятно, вы можете использовать serializers.py без изменений и просто настроить свои представления, чтобы вернуть правильные параметры и, возможно, установить cookie сеанса (не можете вспомнить, если это уже выполнено при аутентификации).

Ответ 2

Если вы хотите что-то подобное, я делаю то же самое, но я использую аутентификацию Token.

Проверьте свою страницу токена здесь

Это может быть не то, что вы хотите, но так, как я это делаю (поскольку я использую его как конечные точки отдыха api для мобильных клиентов)

Я могу сделать свой url localhost:8000/api/users/ -H Authorization : Token Затем браузер может использовать обычную страницу входа, которую вы создаете, в предоставленном ракурсе ресурсов.

url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')

и получить токены для навигации без входа

url(r'^api-token-auth/', 'rest_framework.authtoken.views.obtain_auth_token')

Затем, если вы совершаете звонки, вы можете передать токены авторизации. Конечно, это именно то, как я это делаю, и это, вероятно, не самый эффективный способ, но моя цель состояла в том, чтобы создать способ, с помощью которого я могу предоставить пользователям аутентификацию сеанса для браузеров и мобильного доступа через токены.

Затем в вашем view.py убедитесь, что вы добавили требования к аутентификации для этого представления. Почти так же, как раздел сеансовой аутентификации

permission_classes = (permissions.IsAdminUser,)

но также включают

authentication_classes = (authentication.TokenAuthentication,)

Я надеюсь, что это поможет, но если нет, удачи в поиске.

Ответ 3

Конечно, токен - это хороший способ аутентификации, но спрашивающий спрашивает о проверке сеанса.

Запрос:

POST /api/v1/login  username='username' password='password' 
  • Введите csrftoken значение в X-CSRFToken в заголовке
  • Даже если кто-то использует email в качестве имени пользователя, параметр имени username требуется для ввода электронной почты (например, username='[email protected]')

Ответ:

302 FOUND sessionid="blahblah"
  • Если вы не указали значение next, оно автоматически перенаправится в /accounts/profile/, что может привести к ошибке 404