使用 Django REST JWT 登录

Login with Django REST JWT

我有两个应用程序的 Django 项目。第一个应用程序是基于默认 Django 身份验证机制的简单 Login/Register 应用程序。它有两种形式,成功登录或注册后将被重定向到我的第二个应用程序。所以,我的第二个应用程序是基于 Vue.js.

的单页应用程序

我还使用了 djangorestframework 和 djangorestframework-jwt 包。

我了解 JWT 的工作原理,但我不明白如何将其应用到我的项目中。 例如,这是在 POST 之后执行的代码的一部分-在我看来来自登录表单的请求:

...
username = request.POST['username']
password = request.POST['password']
user = authenticate(request, email=username, password=password)
if user is not None:
    login(request, user)
    return redirect('spa')
...

所以,我有下一个问题:

  1. 成功登录后(重定向前)我应该做什么才能生成令牌并随响应一起发送
  2. djangorestframework-jwt 提供要包含在 url 中的视图

    from rest_framework_jwt.views import obtain_jwt_token, refresh_jwt_token, verify_jwt_token
    

    那么,我应该在哪里打电话给 obtain_jwt_token?登录成功后进入SPA?

  3. 为了使用 JWT,我应该为用户模型创建序列化程序吗?
  4. 在没有 RESTful 支持的情况下使用 *rest-jwt 是否正确?

开始你的第四个问题:

Is it right to use *rest-jwt without RESTful support?

Rest JWT 是 APIs 的身份验证方法,因此将其与 Django 默认身份验证混合使用有点不当,我认为这就是您 运行 对这个问题感到困惑的原因。您应该将 rest-jwt 方法用作独立的身份验证过程,而不是与内置的 Django 身份验证方法捆绑在一起。

考虑到这一点,我认为最好的方法是将第一个应用程序中的 sign-in/sign-up 功能合并到 Vue 应用程序中。然后 Vue 应用程序中的 auth 方法可以从您的 Django 服务器访问 API 路由。

这里简要介绍了 运行 它的工作原理:

myapp/urls.py中:

from rest_framework_jwt.views import obtain_jwt_token, refresh_jwt_token, verify_jwt_token
urlpatterns = [
    url('auth/token$', obtain_jwt_token),
    url('auth/token/refresh', refresh_jwt_token,
    url('auth/token/verify', verify_jwt_token)
]

然后在 Vue 中,您的登录功能可以使用用户凭据向 [host]/auth/token 发出 POST 请求以接收 JWT。供参考 DRF JWT 文档:https://jpadilla.github.io/django-rest-framework-jwt/#usage

这样您就不必担心重定向和更改身份验证过程。