0

我有两个应用程序的 Django 项目。第一个应用程序是基于默认 Django 身份验证机制的简单登录/注册应用程序。它有两种形式,成功登录或注册后将被重定向到我的第二个应用程序。所以,我的第二个应用是基于 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
    

    那么,我应该在哪里调用 gain_jwt_token?成功登录后在 SPA 中?

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

1 回答 1

0

开始你的第四个问题:

在没有 RESTful 支持的情况下使用 *rest-jwt 是否正确?

Rest JWT 是 API 的一种身份验证方法,因此将其与 Django 默认身份验证混合使用有点误用,我认为这就是您在这个问题上遇到困惑的原因。您应该将 rest-jwt 方法用作独立的身份验证过程,而不是与内置的 Django 身份验证方法绑定。

考虑到这一点,我认为最好的方法是将您的第一个应用程序中的登录/注册功能合并到您的 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

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

于 2018-08-26T22:04:12.423 回答