我试图使用Django4和JWT来构建SPA的服务器端认证,但最终失败了
首先
如果在使用Django和React来构建单页应用程序时,我想知道关于身份验证的相关情况,所以我开始进行调查。前辈们得出结论,与自己实现相比,通过外部服务来认证更安全。在众多方法中,使用JWT(Json Web Token)的方式似乎有更多的相关信息传播。
因此,我也打算参考这个网站来进行实现,但是随着Django4的发布,发现现有的方法无法正常工作,因此我决定撰写这篇文章。
2. 前提条件
-
- OS:Mac, Linux
-
- Python3.9
- virtualenv
听说Django4中删除了url函数。
不论Django的版本如何,我将Django4安装到虚拟环境中,按照这个网站的说明进行初始设置,并尝试运行迁移。然而,在终端中我收到了一个错误,说找不到URL。
经过调查,据说Django4删除了django.conf.urls中的url函数。取而代之的是,将urls.py文件修改如下:
from django.urls import path
并成功运行迁移、创建超级用户和启动服务器等所有命令,但是却返回了405错误。如果按照我们介绍的网站进行构建,本应该
这样的画面出现的原因和解决方法,关于405错误,对我来说一点也不清楚。我打算以后来研究这个问题。但是,我认为只要解决了这个问题,使用Django4和JWT构建认证也不会太难。至少从服务器端来看,没有错误。
4. 结论
在構建時,請指定Django3。
如果在服务器端指定Django3,它将顺利运行。参考的网站上提供了构建的步骤。
$ mkdir backend/ && cd backend/
$ python3.6 -m venv env
$ source env/bin/activate
$ pip install coreapi django djangorestframework \ djangorestframework-simplejwt
$ pip freeze > requirements.txt
$ django-admin startproject config .
解释如下,但使用此方法将安装最新版本的Django4。因此,需要指定虚拟环境中安装的Django版本,因此需要将以下命令部分修改如下。
$ mkdir backend/ && cd backend/
$ python3.6 -m venv env
$ source env/bin/activate
$ pip install coreapi django==3.1.14 djangorestframework pyyaml \ djangorestframework-simplejwt
$ pip freeze > requirements.txt
$ django-admin startproject config .
在安装Django时,我们需要指定一个适当的版本来安装Django3的已发布版本。此外,我们还需要修改命令以安装pyyaml。如果不添加pyyaml,当访问localhost:8000/api时会出现找不到pyyaml的错误。
访问 localhost:8000/api,并点击右上角的登录按钮。输入您在创建超级用户时设置的用户名和密码,并确认登录成功后即可确定OK。
以上是指南,只需按照网站上的说明修改config下的settings.py和urls.py文件,处理将正常运行。
有没有人能告诉我在Django4中实现单页面应用(SPA)时的认证方法呢…。
请提供URL以供参考。
Full stack Django: Quick start with JWT auth and React/Redux (Part I)(こちらを元にして構築しました)
【Django】cannot import name ‘url’ from ‘django.conf.urls’ エラーの原因と対処法