我正在尝试使用由django REST框架制成的REST API将数据发送到我的React Native应用程序。为了进行身份验证,我使用allauth在创建用户时创建一个身份验证令牌。我的问题是:我不知道下一步要做什么(一旦有了令牌)。我希望能够使用API检索用户的数据,但是我不知道如何使用DRF处理身份验证。
每次发出请求时都必须发送令牌吗?如果是,那么json想要什么? (带有本地响应的前端)
如何发回数据?看起来像这样:
def sendUsername(request):
return request.user.get_username()
如果没有怎么办?如果是的话,它看起来不是很安全,那么有没有办法使它至少更安全一点?
我真的很陌生,很抱歉,如果它看起来很笨。
谢谢您的时间。
答案 0 :(得分:0)
我用DRF做过类似的事情,但是没有React,也许我会告诉你如何进行
后端 1.-创建一个端点以登录 1.1。-刷新用户令牌 1.2.-返回用户令牌 2.-保护api,使其无法接受没有令牌的请求
前端 1.-将用户令牌存储在localStorage中 2.-使用用户令牌提出所有请求
可选: 如果需要,您可以创建一个中间件来控制Authentication方法
答案 1 :(得分:0)
在这种情况下,有两种处理方法。
首先,您必须创建一个authtoken/
网址,该网址返回当前用户的身份验证令牌。您将令牌存储在浏览器中。存储令牌的一个位置是window.localStorage
。
在django中创建其余API时,您必须为其提供了不同的django权限。因此,对于权限为AllowAny
的用户,不需要身份验证,但是对于权限为IsAuthenticated
的用户,您必须在执行任何API请求的同时在标头中发送令牌给定的API。
解码基于令牌的种类。如果您使用rest_framework_auth,在这种情况下,令牌解码将在内部完成,以实现用于用户身份验证的密码。如果决定采用基于jwt的身份验证,则可以编写自定义Web身份验证,该身份验证使用jwt和sha1算法分别对密码进行编码和解码。如果您想了解有关jwt身份验证的更多详细信息,可以查看https://thinkster.io/tutorials/django-json-api/authentication。
上述方法有其缺点,因为任何能够访问您令牌的人都可以轻松地对其进行解码以找到密码。因此,一种常见的做法是使用盐作为创建验证令牌的附加因素。因此,在对给定密码进行编码之后,盐会发生另一种编码,然后将其保存在前端。这样可以确保前端中存在的令牌不会被有权访问该令牌的任何人解码,而只能被有权访问存储在数据库中每个用户的盐解密。
使用jwt身份验证时,盐的概念就会出现。在那里,密码另存为“ password + salt + shared_key”,shared_key对数据库保持唯一,而salt对model字段保持唯一。这样可以确保密码难以破解。然后将上述组合通过jwt进行编码。