1

バックエンドでソーシャル認証のみを使用する(social_djangoによって処理される)アプリ内で現在の認証済みユーザーについてReactに情報を渡したいとします。私のユーザとユーザのトークン情報はすべてdjango RESTに保存されており、トークンにアクセスするためには通常、rest_framework.authtokenのobtain_auth_tokenビューにPOSTリクエストを送信する必要があります。私のジャンゴルートurls.pyファイルは次のようになります。Django RESTを反応させる - パスワードなしでソーシャル認証トークンを取得する

... 
from rest_framework.authtoken.views import obtain_auth_token 

urlpatterns = [ 
    ... 
    url(r'^obtain-auth-token/$', obtain_auth_token), 
    ... 
] 

しかし、実際に私のデータベース内のユーザーに関連付けられた認証トークンを取得するために、私は私のPOSTリクエスト内のユーザ名とパスワードを入力する必要があります。ソーシャル認証では、パスワードを割り当てずに新しいユーザーが自動的に作成されるため、どのようにしてこれらのトークンを取得できますか?

+0

要求本体でトークンを戻し、Javascript変数に割り当てることができます。 –

答えて

0

これは問題ありませんか?いいえ、ここに私がしたことがあります。それが役に立てば幸い。

マイセットアップ:Postgresのと

  1. ジャンゴ(今のGoogle+のライブラリを使用するために)REST API実装
  2. 社会認証用のPython社会認証(PSA)のための
  3. Djangoの残りのフレームワーク
  4. リアクタフロントエンド

ログインの場合は、それは/login/google-plus/に変換されます。これはacess_tokenを取得するだけでなく、データベースに「ソーシャルユーザー」を作成します。私は私のケースではoauth 2.0のクライアント側のライブラリを使用し、おおよそクライアント側のすべての詳細とGoogleユーザーオブジェクトをフェッチするthisのアプローチに従った。私は上記のリンクのフォームをajax呼び出しで置き換えました。これはより柔軟で、必要なトークンやその他の情報にアクセスするために私にコントロールを与えます。ここでのajax呼び出しは、データベース内のソーシャル認証テーブルにソーシャルユーザーの作成を保証します。

<script type="text/javascript"> 

gapi.load('auth2', function() { 
let auth2; 

auth2 = gapi.auth2.init({ 
    client_id: "YOUR CLIENT ID", 
    scope: "profile", 
    cookie_policy: 'single_host_origin' 
}); 

auth2.then(function() { 
    let button = document.getElementById("google-plus-button"); 

    auth2.attachClickHandler(button, {}, function (googleUser) { 
    // Send access-token to backend to finish the authenticate 
    // with your application 

    let authResponse = googleUser.getAuthResponse(); 

    $.ajax({ 
     "type": "POST", 
     "url": "/complete/google-plus/", 
     "data": { 
     "access_token": authResponse.access_token, 
     "CSRF": "{% csrf_token %}" 
     } 
    }).then(function(data){ 
     console.log(data); 
     // Your success code 
    }).fail(function(error){ 
     console.log(error); 
    }); 
    }); 
}); 
}); 
</script> 

あなたは、ユーザーがログアウトするまで、あなたは、ブラウザのローカルストレージに保存することができaccess_tokensをフェッチしたら。ログアウトすると、それらを削除することができます。

この方法は私が言及したセットアップのために私のためにうまくいきます。また、ユーザー名とパスワードで/obtain-auth-tokenを照会する問題はまったくありません。

PSA djangoからソーシャル認証トークンにアクセスする他の方法があるかどうかは確かに分かりますか。乾杯!