django - 如何使用 Django Web 服务获取和保存令牌
问题描述
我不确定我是否正确。请给我一个提示或方向。
我使用 Django 设置了我的 Web 服务,还使用 Django REST 框架使用 React Native 制作了移动应用程序。Django 使用基本会话身份验证,但 Django REST API 使用令牌身份验证来处理来自移动应用程序的请求。
我想在我现有的 Django web 中实现小型 ReactJS 应用程序。在这个阶段,我认为我的小型反应应用程序将需要身份验证令牌来与 REST api 进行通信。
所以,我的想法是,当用户登录 Web 登录页面时,需要从 API 接收用户的 API 令牌并保存到 cookie 或 localStorage 中,同时在 Django Web 服务中处理正常的登录过程。因为我不想让用户再次登录以在我的网页上运行 react 应用程序以获取身份验证令牌。
我在正确的轨道上吗?如果是这样,我怎样才能使它起作用?请参考我在 Django login view.py 中的代码 我是否需要一些代码才能获取 API 身份验证令牌并将其保存到客户端?
def Login(request):
if not request.user.is_authenticated:
if request.method == "POST":
email = request.POST['email']
password = request.POST['password']
user = authenticate(email = email, password = password)
if user is not None:
login(request, user)
messages.add_message(request, messages.SUCCESS, request.user.nickname + ' Welcome!')
return redirect('Search')
else:
messages.add_message(request, messages.WARNING, 'Please check Email / Password again')
return redirect('login')
else:
form = LoginForm()
return render(request, 'login.html', {'form': form })
else:
return redirect('main')
解决方案
您在登录功能中做了一些无用的操作。你可以使用 jwt。它有一些很好的支持登录的功能。在其登录功能中,当使用 post 发送用户名和密码时,它会将令牌返回给客户端。 http://getblimp.github.io/django-rest-framework-jwt/
你只需要设置 urlpattern
from rest_framework_jwt.views import obtain_jwt_token
#...
urlpatterns = [
'',
# ...
url(r'^api-token-auth/', obtain_jwt_token),
]
它返回令牌
$ curl -X POST -d "username=admin&password=password123" http://localhost:8000/api-token-auth/
在其他请求中,如果您需要身份验证,请使用以下请求
$ curl -H "Authorization: JWT <your_token>" http://localhost:8000/protected-url/
推荐阅读
- google-apps-script - 发布 Google 附加组件的冲突答案
- ruby-on-rails - 我在 Rails 应用程序中不断收到重定向循环错误
- php - 如何在 laravel-lighthouse 中订阅 phpunit?
- python - 有什么方法可以用python在elasticsearch中提供累积索引?
- node.js - 如何使用sequelize在express js中为一条记录添加多个外键
- android - 在颤振项目中找不到Android Manifest
- c# - .net 框架系统调用和跨平台能力
- raspberry-pi - 使用没有 Google Coral USB 的 tensorflow lite 进行图像分类
- android - Android相机图像未在图库中上传
- python - 如何使用模拟测试引用“self”的大型类中的方法?