使用PyJWT进行基于Django Token的身份验证,验证令牌问题

时间:2015-07-18 09:24:11

标签: angularjs django django-rest-framework jwt

我正在Python Django中实现基于令牌的身份验证,因此我遵循基于令牌的身份验证步骤,如下所述:

  

在基于令牌的身份验证中,不会使用Cookie和会话。   将使用令牌为每个请求对用户进行身份验证   服务器。让我们重新设计基于令牌的第一个场景   认证

     

它将使用以下控制流程:

     
      
  1. 用户在登录表单中提供用户名和密码,然后单击“登录”。
  2.   
  3. 发出请求后,通过查询数据库验证后端的用户。如果请求有效,请创建令牌   使用从数据库中获取的用户信息,然后返回   响应头中的那些信息,以便我们可以存储令牌   本地存储中的浏览器。
  4.   
  5. 在每个请求标头中提供令牌信息,以便访问应用程序中受限制的端点。
  6.   
  7. 如果从请求标头信息中提取的令牌有效,请让用户访问指定的端点,并使用JSON或   XML。
  8.   

我完成了上面列出的前两个步骤。我需要继续第3步和第4步。因此,我正在编写一个Django装饰器来为我们完成任务。

然而,在认证步骤之后我有点卡住了。

以下是将teacher_idtoken发送到服务器的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进行基于令牌的身份验证。如果有人遇到此问题,请告诉我。

1 个答案:

答案 0 :(得分:1)

请查看:

http://getblimp.github.io/django-rest-framework-jwt/#rest-framework-jwt-auth

在处理django-rest-framework时,这将为您提供JWT支持。