2016-02-10 109 views
0

我有几个关于令牌和用户名/密码对的问题。Django安全和身份验证

  1. 我有一个Django的休息API建立它使用令牌一旦用户注册。不过,我不知道如何将令牌返回给用户的安全问题?目前我使用:

    response_data = UserSerializer(instance=new_user).data 
    response_data['token'] = token.key 
    return Response(response_data, status=status.HTTP_201_CREATED) 
    

但这种方式我可以清楚地看到所有的细节在我的身体反应在浏览器?甚至我的密码。我应该如何将其退还给客户?

  • 当登记用户本人做这种方式:

    系列化= UserSerializer(数据= request.DATA) 如果serialized.is_valid(): 打印(串行化.validated_data) new_user = get_user_model()。objects.create(** serialized.validated_data) 令牌= Token.objects.create(用户= new_user)

  • 这是否会正确地创建我的用户?密码会被散列吗?

    谢谢

    P.S.这里是整个方法:

    @api_view(['POST']) 
    def register_user(request): 
        print (request) 
        serialized = UserSerializer(data=request.DATA) 
        if serialized.is_valid(): 
         print(serialized.validated_data) 
         new_user = get_user_model().objects.create(**serialized.validated_data) 
         token = Token.objects.create(user=new_user) 
    
         response_data = UserSerializer(instance=new_user).data 
         response_data['token'] = token.key 
         return Response(response_data, status=status.HTTP_201_CREATED) 
        else: 
         return Response(serialized._errors, status=status.HTTP_400_BAD_REQUEST) 
    

    回答

    0

    我会处理#1通过设置一个cookie,如果这适用于您的用例。 Relevant SO Post: How to set cookie in Django view and then render template.

    对于#2,我相信你应该使用create_user而不是createCheck the Django docs here.一个快速的方法来检查,看看你的密码得到妥善哈希是流行开壳,抢用户对象,看看密码的样子:

    >>u = User.objects.get(id=1) 
    >>u.password 
    u'pbkdf2_sha256$12000$e30c2ea7a76f83b7c1a975ddc24286b675e714ebbbc72ccd5f0401730231ab57' 
    

    你会很容易就能辨出或者密码没有被散列。

    +0

    嗯,我把它发送到Android应用程序...我不能使用cookies – mp3por

    +0

    你是正确的2 - >使用create_user()不使用create_user()来做密码 – mp3por

    +0

    查看你'已经编写了序列化您的用户数据,将'token'附加到它并返回它。如果你想保留某些数据(比如哈希密码),你可以在你的'response_data'中删除它(或者根本不包含它)。如果不知道你的应用程序的工作方式,很难给出更具体的答案。渲染已返回的数据可能取决于您的Android应用程序逻辑而非Django。 – souldeux