Как создать 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"
Ответы
Ответ 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