我正在Python Django中实现基于令牌的身份验证,因此我遵循基于令牌的身份验证步骤,如下所述:
在基于令牌的身份验证中,不会使用Cookie和会话。 将使用令牌为每个请求对用户进行身份验证 服务器。让我们重新设计基于令牌的第一个场景 认证
它将使用以下控制流程:
- 用户在登录表单中提供用户名和密码,然后单击“登录”。
- 发出请求后,通过查询数据库验证后端的用户。如果请求有效,请创建令牌 使用从数据库中获取的用户信息,然后返回 响应头中的那些信息,以便我们可以存储令牌 本地存储中的浏览器。
- 在每个请求标头中提供令牌信息,以便访问应用程序中受限制的端点。
- 如果从请求标头信息中提取的令牌有效,请让用户访问指定的端点,并使用JSON或 XML。
醇>
我完成了上面列出的前两个步骤。我需要继续第3步和第4步。因此,我正在编写一个Django装饰器来为我们完成任务。
然而,在认证步骤之后我有点卡住了。
以下是将teacher_id
和token
发送到服务器的AngularJS代码:
get_teacher_profile : function(teacher_id,token) {
$http.defaults.headers.common['Authorization'] = 'Token ' + token;
return $http.get("http://127.0.0.1:8000/user_manager/teacher/" + teacher_id + '/' + token)
.then(function(response) {
if (typeof response.data === 'object') {
return response.data;
} else { return "Error"; }
}, function(error) {
return null;
});
},
根据Django休息框架,这里是urls.py指定的路由器:
router.register(r'teacher', view.TeacherViewSet)
...这里是TeacherViewSet
类:
class TeacherViewSet(viewsets.ModelViewSet):
queryset = Teacher.objects.all()
serializer_class = Teacher_Serializer
现在我需要在TeacherViewSet
中验证令牌。我尝试过一些装饰器,但是我无法访问TeacherViewSet
标题中设置的令牌。我使用PyJWT进行基于令牌的身份验证。如果有人遇到此问题,请告诉我。
答案 0 :(得分:1)
请查看:
http://getblimp.github.io/django-rest-framework-jwt/#rest-framework-jwt-auth
在处理django-rest-framework时,这将为您提供JWT支持。