Как создать API входа с помощью Django Rest Framework?
Я хочу создать api входа (или использовать существующий, если он уже предварительно упакован) с помощью Django Rest framework. Тем не менее, я в полной растерянности. Всякий раз, когда я отправляю запрос post на url-адрес django rest framework "login", он просто отправляет обратно просматриваемую страницу шаблона 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"
4 ответов:
взгляните на представление api из django-rest-framework-jwt. Это реализация для создания токенов аутентификации, а не сеансов cookie, но ваша реализация будет аналогичной. См.views.py и serializers.py. вероятно, вы можете использовать
serializers.pyбез изменений, и просто настроить свой взгляды, чтобы вернуть правильные параметры и, возможно, установить cookie сеанса (не могу вспомнить, если это уже выполнено в подлинности).
если вы хотите что-то вроде этого я делаю то же самое, однако я использую маркер аутентификации.
проверьте их маркерную страницу здесь
это может быть не то, что вы хотите, но так, как я это делаю (так как я использую его в качестве конечных точек REST api для мобильных клиентов)
Я могу сделать свой url
localhost:8000/api/users/ -H Authorization : TokenЗатем браузер может использовать обычную страницу входа, которую вы создаете в предоставленном Rest framework url
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')и к вам токены для навигации "без входа"
url(r'^api-token-auth/', 'rest_framework.authtoken.views.obtain_auth_token')затем, если вы делаете звонки и такие вы можете передать маркеры авторизации. Конечно, это именно то, как я это делаю, и это, вероятно, не самый эффективный способ, но моя цель состояла в том, чтобы создать способ, которым я могу предоставить пользователям аутентификацию сеанса для браузеров и мобильного доступа через токены.
тогда в вашем views.py убедитесь, что вы добавили требования проверки подлинности для этого представления. Почти то же самое, что и сессия разделе Проверка подлинности
permission_classes = (permissions.IsAdminUser,)но также включают в себя
authentication_classes = (authentication.TokenAuthentication,)Я надеюсь, что это поможет, но если нет, удачи в вашем поиске.
конечно, токен-это хороший способ аутентификации, но questioner спрашивает об аутентификации сеанса.
запрос:
POST /api/v1/login username='username' password='password'
- поставить
csrftokenстоимостью наX-CSRFTokenв заголовке- даже если кто-то использует
usernameпараметр name требуется для ввода электронной почты (например,username='[email protected]')ответ:
302 FOUND sessionid="blahblah"
- если вы не указали
nextзначение, оно будет автоматически перенаправление в/accounts/profile/что может привести к ошибке 404
добавляем наш вид:
from rest_framework_jwt.views import refresh_jwt_token urlpatterns = [ ... url(r'^rest-auth/', include('rest_auth.urls')), url(r'^rest-auth/registration/', include('rest_auth.registration.urls')), ... url(r'^refresh-token/', refresh_jwt_token), ]
Comments