How do I create a login API using Django Rest Framework?
我想使用django rest框架创建一个登录api(或者如果它已经预先捆绑,则使用现有的api)。 但是,我完全不知所措。 每当我向django rest框架"登录"网址发送帖子请求时,它只会发回可浏览的api模板页面......
我的配置
urls.py
1 | url(r'^api/v1/', include('rest_framework.urls', namespace='rest_framework')) |
settings.py
1 2 3 4 5 6 | REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_framework.authentication.BasicAuthentication', 'rest_framework.authentication.SessionAuthentication', ) } |
我想要的是
请求:
1 | POST /api/v1/login username='name' pass='pass' |
响应:
1 | 200 OK"{username: 'name', 'userId': '54321'}" set-cookie: sessionid="blahblah" |
看一下django-rest-framework-jwt的api视图。它是用于创建auth令牌而不是cookie会话的实现,但您的实现将类似。请参见views.py和serializers.py。您可以使用
如果你想要这样的东西我做同样的事情,但我使用令牌认证。
在这里查看他们的令牌页面
这可能不是你想要的,但我这样做的方式是(因为我将它用作移动客户端的rest api端点)
我可以做我的网址
然后,浏览器可以使用您在提供的其余框架URL上创建的常规登录页面
并获得"无登录"导航的令牌
然后,如果您拨打电话,您可以通过授权令牌。当然这就是我如何做到这一点,它可能不是最有效的方式,但我的目标是创建一种方式,我可以为用户提供浏览器的会话身份验证和通过令牌的移动访问。
然后在views.py中确保添加该视图的身份验证要求。与会话认证部分几乎相同
还包括
我希望这有帮助,但如果没有,祝你的搜索顺利。
当然令牌是一种很好的身份验证方式,但是提问者正在询问会话身份验证。
请求:
1 | POST /api/v1/login username='username' password='password' |
-
将
csrftoken 值放在标题中的X-CSRFToken 处 -
即使有人使用
email 作为用户名归档,电子邮件输入也需要username 名称参数(例如username='[email protected]' )
响应:
1 | 302 FOUND sessionid="blahblah" |
-
如果未指定
next 值,它将自动重定向到/accounts/profile/ ,这可能会产生404错误
添加我们的观点:
1 2 3 4 5 6 7 8 9 | 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), ] |