如何使用 Django RestFramework 创建登录 API?

我想使用 django rest 框架创建一个登录 API (或者使用现有的 API,如果它已经被预绑定的话)。然而,我完全不知所措。每当我向 django rest 框架“ login”url 发送一个 post 请求时,它就会返回可浏览的 api 模板页面..。

我的外形

Urls.py

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

设置

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"
89078 次浏览

Django-rest-Framework-jwt查看 api 视图。它是用于创建认证令牌而不是 cookie 会话的实现,但是您的实现将是类似的。参见 视野,视野序列化器 py。您也许可以不加修改地使用 serializers.py,只需调整视图以返回正确的参数,并可能设置会话 cookie (如果已经在身份验证中执行,则无法回忆)。

如果您想要这样的东西,我做同样的事情,但是我使用令牌认证。

查看他们的令牌页 给你

这可能不是您想要的,但是我的方法是这样的(因为我将它用作移动客户端的休息 api 端点)

我可以做我的网址 localhost:8000/api/users/ -H Authorization : Token 然后,浏览器可以使用您在提供的 rest 框架 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,)

我希望这有帮助,但如果没有,祝你好运的搜索。

当然,令牌是一种很好的身份验证方式,但提问者询问的是会话身份验证。

要求:

POST /api/v1/login  username='username' password='password'
  • csrftoken值放在头中的 X-CSRFToken
  • 即使有人使用 email作为用户名,username的名称参数是必需的电子邮件输入(例如 username='sample@domain.com')

回应:

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),
]