【问题标题】:How to authenticate request in Django-rest-auth?如何在 Django-rest-auth 中验证请求?
【发布时间】:2016-07-01 01:21:49
【问题描述】:

我正在尝试将 django-rest-auth 包集成到我的 Web 应用程序中。到目前为止,我可以使用 django-rest-auth 包提供的 API 注册用户、发送密码重置电子邮件和登录。

现在,当我发送登录请求时,它会在成功验证后返回“令牌”。

如何在进一步的请求中发送身份验证令牌?例如,我试图使用GET /rest-auth/user 获取用户,但它给了我一个响应Authentication credentials not provided。我尝试通过 HTTP 基本身份验证传递令牌(base64 编码令牌作为用户名并将密码留空)。我仍然无法工作。

有人知道我应该如何在请求中传递这个令牌吗?

【问题讨论】:

    标签: django rest django-rest-framework django-rest-auth


    【解决方案1】:

    如果您想使用Token Authentication,您必须设置Authorization HTTP 标头。来自文档:

    对于客户端进行身份验证,令牌密钥应包含在 Authorization HTTP 标头中。键应以字符串文字“Token”为前缀,用空格分隔两个字符串。例如:

    授权:令牌 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b

    在 ajax 调用中,您可以使用这样的标头:

    $.ajax({
        type: 'POST',
        url: url,
        beforeSend: function (request)
        {
           request.setRequestHeader("Authorization", "Token 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b");
        },
    });
    

    【讨论】:

    • 即使这样也行不通。仍然收到回复:{"detail":"Authentication credentials were not provided."}
    • 你配置AUTHENTICATION_CLASSES了吗? (django-rest-framework.org/api-guide/authentication/…) 并添加了TokenAuthentication?
    • “9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b”从何而来?模板如何知道用户的令牌是什么??
    【解决方案2】:

    你好 您需要在标头中发送令牌

    $.ajax({
                type:"POST",
                beforeSend: function (request)
                {
                    request.setRequestHeader("Authority", 'Bearer 33a95862173cc0565fe502eb062b2e7c67e23a3a');
                },
    

    并在 django 代码中使用

    user = request.user
    if user:
     return "User token verified"
    elif :
     return "User token not verified"
    

    在 django 中自动在标头中查找令牌并使用令牌获取用户数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-20
      • 1970-01-01
      • 1970-01-01
      • 2011-05-06
      • 2013-08-22
      相关资源
      最近更新 更多