使用Django REST JWT登录

使用Django REST JWT登录,django,django-rest-framework,single-page-application,django-rest-framework-jwt,Django,Django Rest Framework,Single Page Application,Django Rest Framework Jwt,我有一个带有两个应用程序的Django项目。第一个应用程序是基于默认Django身份验证机制的简单登录/注册应用程序。它有两个表单,成功登录或注册后将重定向到我的第二个应用程序。因此,我的第二个应用程序是基于Vue.js的单页应用程序 我还使用了djangorestframework和djangorestframework jwt包 我了解JWT是如何工作的,但我不知道如何在我的项目中实现它。 例如,这是在我的视图中登录表单发出POST请求后执行的代码的一部分: ... username = r

我有一个带有两个应用程序的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')
...
所以,我有接下来的问题:

  • 成功登录后(重定向前)我应该怎么做才能生成令牌并发送响应
  • djangorestframework jwt提供要包含在URL中的视图

    from rest_framework_jwt.views import obtain_jwt_token, refresh_jwt_token, verify_jwt_token
    
    那么,我应该在哪里调用获取jwt令牌?成功登录后是否在SPA中

  • 为了使用JWT,我应该为用户模型创建序列化程序吗
  • 在没有RESTful支持的情况下使用*RESTJWT正确吗

  • 开始你的第四个问题:

    在没有RESTful支持的情况下使用*RESTJWT正确吗

    RESTJWT是API的一种身份验证方法,因此将其与Django default auth混合使用有点误用,我认为这就是为什么您在这个问题上会遇到困惑。您应该将rest jwt方法用作独立的身份验证过程,而不是与内置的Django身份验证方法捆绑在一起

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

    下面简要介绍一下这是如何工作的:

    myapp/url.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文件:

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