ユーザーがトークンで認証できる残りの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を使ってログインしようとした場合:私は記事の投稿は、それを使用できるように
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
がどのように認証されたユーザーのためのトークンを取得します:
$.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)
});
は、私は、ブラウザのコンソールでこのエラーが出ます認証されたユーザーですか?
更新
また、私はこの問題に関連CORSに対処するためにdjango-cors-headersを使用しています。
更新
%[email protected]%20password=secure123?_=1469885103431 405 xhr jquery-3.1.0.min.js:4 278 B 29 ms
更新:デフォルトで追加応答ヘッダ
は、ブラウザのネットワーク通信からの詳細情報を提供 – schacki
@schackiは、詳細を追加しましたChromeでデバッガのネットワーク]タブでそれを見つけます。見てください。 –
%20はスペースを意味します。あなたはajaxリクエストで 'username'を '?username'に、 'password'を '&password'に置き換えます。また、私はこの必要性を覚えているので、 '&grant_type = password'パラメータも必要です。リクエストURLにスペース( '')を付けることはできません。 –