gpt4 book ai didi

django - 使用 Django REST Framework 进行身份验证返回 405

转载 作者:行者123 更新时间:2023-12-02 06:41:22 25 4
gpt4 key购买 nike

我已成功设置TokenAuthentication并生成了用户在身份验证后成功接收的 token 。不幸的是,我无法将 token 发送到 API 而不会出现错误( DRF TokenAuthentication )。该 token 是硬编码的,用于测试,并且我正在使用 djangos runserver 运行。我从响应中看到只允许 POSTOPTIONS,但我可以 curl 没有任何问题:

curl -X GET http://127.0.0.1:8000/api-token-auth -H 'Authorization: Token a83ff8dabb7fc7b800d381fd3994dfe2051cc0c2'

实现

Controller /Login.js:

reSignInCommand: function (aToken) {
var me = this;

Ext.Ajax.request({
url: 'http://127.0.0.1:8000/api-token-auth/',
method: 'GET',
disableCaching: false,
timeout: 10000,
useDefaultXhrHeader: false,
headers: {
'Authorization' : 'Token a83ff8dabb7fc7b800d381fd3994dfe2051cc0c2'
},
success: function(response) {
console.log("success");
},
failure: function(response) {
console.log("failure");
}
});

api/urls.py:

from django.conf.urls import patterns, url, include

urlpatterns += patterns('',
url(r'^api-token-auth/', 'rest_framework.authtoken.views.obtain_auth_token'),
)

调试:

Request URL:http://127.0.0.1:8000/api-token-auth/
Request Method:GET
Status Code:405 METHOD NOT ALLOWED

Request headers:
Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:da,zh;q=0.8,de;q=0.6,en;q=0.4
Authorization:Token a83ff8dabb7fc7b800d381fd3994dfe2051cc0c2
Cache-Control:no-cache
Connection:keep-alive
Host:127.0.0.1:8000
Origin:http://127.0.0.1
Pragma:no-cache
Referer:http://127.0.0.1/sencha/
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36

Response headers:
HTTP/1.0 405 METHOD NOT ALLOWED
Date: Fri, 20 Dec 2013 10:19:50 GMT
Server: WSGIServer/0.1 Python/2.7.5
Vary: Accept, Cookie
Access-Control-Allow-Origin: *
Content-Type: application/json
X-Frame-Options: SAMEORIGIN
Allow: POST, OPTIONS

最佳答案

curl 响应与 AJAX 响应相同。 curl 响应返回 301 状态代码而不是 405,因为您使用了不同的 URL(没有尾部斜杠)。

问题是您只能POST/api-token-auth/ URL,GET方法未实现。

作为 Django REST 框架 API token authentication docs比如说,用例是这样的:

  1. 您必须将用户名密码发布到/api-token-auth/ - 才能获取身份验证 token 。
  2. 要访问需要身份验证的 URL,您必须在授权 HTTP header 中包含 token 。这意味着您必须测试 token 身份验证是否适用于需要身份验证的 URL。

Authentication is always run at the very start of the view, before the permission and throttling checks occur, and before any other code is allowed to proceed.

您不必验证 token ,因为它已经为您完成了。如果 HTTP header 中提供的 token 有效,则请求将具有额外的对象:

  • request.user 将是一个 Django User 实例。
  • request.auth将是一个rest_framework.authtoken.models.BasicToken实例。

关于django - 使用 Django REST Framework 进行身份验证返回 405,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20701447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com