35

django-rest-framework を使用して API を作成する django プロジェクトがあります。

トークンベースの認証システムを使用して、(put、post、delete) の API 呼び出しが許可されたユーザーに対してのみ実行されるようにしたい。

「rest_framework.authtoken」をインストールし、ユーザーごとにトークンを作成しました。

したがって、django.contrib.auth.backends 認証から、属性として auth_token を使用してユーザーを返します。(正常にログインした場合)。

今私の質問は、ポストリクエストでトークンをAPIに送信する方法と、API側でトークンが有効で正しいユーザーに属しているかどうかを確認するにはどうすればよいですか?

特定のユーザーとそのトークンを検証するためのアプリ rest_framework.authtoken のメソッドはありますか? これは非常に便利ではありません。

更新(私が行った変更):これをsettings.pyに追加しました:

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.BasicAuthentication',
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.TokenAuthentication',
    )
}

また、ヘッダーでトークンを送信していますが、まだ機能していません:

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)
4

4 に答える 4

1

私はついに、トークン認証のために機能するdjango「rest-auth」パッケージを手に入れました。これが役立つ場合、ログインに成功して「auth_token」を受け取った後、私のために働いたクライアント側のjQueryコードは次のとおりです。

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
);
于 2015-08-25T06:46:00.353 に答える
0

coreapi を使用している場合。あなたが行う承認を追加するには、 import coreapi auth = coreapi.auth.TokenAuthentication(scheme='Token', token=token_key) 次に行うことができます client = coreapi.Client(auth=auth) response = client.get(my_url)

于 2019-01-02T06:02:54.140 に答える