Как создать 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"
804   4  

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 в заголовке
  • даже если кто-то использует email как имя пользователя подала, 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

    Ничего не найдено.