首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在django-rest-framework中使用TokenAuthentication

如何在django-rest-framework中使用TokenAuthentication
EN

Stack Overflow用户
提问于 2013-07-10 07:53:25
回答 4查看 38.8K关注 0票数 35

我有一个django项目,使用django-rest-framework创建api。

希望使用基于令牌的身份验证系统,以便api调用(put,post,delete)将仅对授权用户执行。

我安装了'rest_framework.authtoken‘,并为每个用户创建了令牌。

因此,现在通过django.contrib.auth.backends身份验证,它返回user,属性为auth_token。(登录成功时)。

现在我的问题是,如何将带有post请求的令牌发送到api,以及在api端如何验证令牌是否有效以及是否属于正确的用户?

app rest_framework.authtoken中有没有什么方法可以验证给定的用户及其令牌?不觉得this很有用!

更新(我所做的更改):在我的settings.py中添加了以下内容:

代码语言:javascript
复制
REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.BasicAuthentication',
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.TokenAuthentication',
    )
}

也在我的头中发送令牌,但它仍然不起作用:

代码语言:javascript
复制
if new_form.is_valid:
    payload= {"createNewUser":
              { "users": request.POST["newusers"],
                "email": request.POST["newemail"]
                }
              }

    headers =  {'content-type' : 'application/json', 
                'Authorization': 'Token 6b929e47f278068fe6ac8235cda09707a3aa7ba1'}

    r = requests.post('http://localhost:8000/api/v1.0/user_list',
                      data=json.dumps(payload),
                      headers=headers, verify=False)
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-07-10 19:22:33

“如何将带有post请求的令牌发送到我的接口”

从文件里..。

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

代码语言:javascript
复制
Authorization: Token 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b

“在api端如何验证token是否有效以及是否属于正确的用户?”

你不需要做任何事情,只需访问request.user来返回经过身份验证的用户- REST框架将处理对任何不正确的身份验证返回“401 user”响应。

票数 36
EN

Stack Overflow用户

发布于 2016-03-31 20:10:56

回答你问题的前半部分:

如何将带有post请求的令牌发送到我的接口

您可以使用Python requests库。对于django-rest-framework TokenAuthentication,令牌需要在头部中传递,并以字符串Token (see here)为前缀:

代码语言:javascript
复制
import requests
mytoken = "4652400bd6c3df8eaa360d26560ab59c81e0a164"
myurl = "http://localhost:8000/api/user_list"

# A get request (json example):
response = requests.get(myurl, headers={'Authorization': 'Token {}'.format(mytoken)})
data = response.json()

# A post request:
data = { < your post data >}
requests.post(myurl, data=data, headers={'Authorization': 'Token {}'.format(mytoken)})
票数 4
EN

Stack Overflow用户

发布于 2015-08-25 14:46:00

我终于可以使用django "rest-auth“包进行令牌身份验证了。如果这有帮助,在您成功登录并收到“auth_token”后,以下是为我工作的客户端jQuery代码:

代码语言:javascript
复制
var user_url = {API URL}/rest-auth/login
var auth_headers = {
  Authorization: 'Token ' + auth_token
}
var user_ajax_obj = {
  url : user_url,
  dataType : 'json',
  headers: auth_headers,
  success : function(data) {
    console.log('authorized user returned');
  },
  error: function(XMLHttpRequest, textStatus, errorThrown) {
    console.log('error returned from ' + user_url);
  }
};
$.ajax(
  user_ajax_obj
);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17560228

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档