我想構建一個用戶可以使用令牌進行身份驗證的休息api。我在已安裝的應用程序列表中包含了rest_framework.authtoken
。還增加了所需的配置在settings.py:如何使用django rest框架和ajax獲取令牌
INSTALLED_APPS = (
...
'rest_framework.authtoken'
)
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
),
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.TokenAuthentication',
'rest_framework.authentication.SessionAuthentication',
)
}
中定義的方法來聽post_save
信號和用於新創建的用戶創建新的令牌。然後我做了遷移。創建新用戶後,我可以看到該用戶的令牌。
另外,如果我做
http POST 0.0.0.0:80/api-token-auth/ username='[email protected]' password='secure123'
我得到這個迴響應
HTTP/1.0 200 OK
Allow: POST, OPTIONS
Content-Type: application/json
Date: Sat, 30 Jul 2016 12:05:30 GMT
Server: WSGIServer/0.1 Python/2.7.3
Vary: Cookie
X-Frame-Options: SAMEORIGIN
{
"token": "4aecfb249265064c55300d782e4c7e66b8b77063"
}
,所以我想它的工作。但是,如果我嘗試用AJAX登錄:
$.ajax({
url: 'http://test.com/api-token-auth/ username=' + email + ' password='+ password,
dataType: 'json',
cache: false,
success: function(data) {
console.log(data);
}.bind(this),
error: function(xhr, status, err) {
console.log(err);
}.bind(this)
});
我得到這個錯誤在瀏覽器控制檯:
jquery-3.1.0.min.js:4 GET http://test.com/api-token-auth/%[email protected]%20password=secure123?_=1469883569618 405 (Method Not Allowed)
bundle.js:27453 Method Not Allowed
如何獲得的令牌身份驗證的用戶,這樣我可以用它來發布的經過認證的用戶?
更新
我也是用django-cors-headers來處理有關問題CORS。
更新
%[email protected]%20password=secure123?_=1469885103431 405 xhr jquery-3.1.0.min.js:4 278 B 29 ms
更新:加入響應頭
從瀏覽器的網絡通信提供的詳細信息,在Chrome中你會發現它在調試器的網絡選項卡 – schacki
@schacki添加細節。請看一看。 –
%20表示空格,在你的ajax請求中用'?username'和'password'替換'username'爲'&password'。另外我記得這也需要'&grant_type = password'參數。請求網址中不能有空格('')。 –