OAUTH API を使用して、ユーザーの Google カレンダーへのアクセスを確認しています。彼らは OAUTH を使用して私のシステムにログインするのではなく、私のサイトが彼らのデータにアクセスすることを受け入れるだけです。
問題は、ユーザーが Google アカウントからログアウトし、確認を押した後、強制的にセッションからログアウトされ、リンクを元に戻す方法がないことです。
これは、ブラウザー セッションで既に Google アカウントにログインしている場合に機能し、承認を押すと、適切なページにリダイレクトされます。
キャッシュ、Cookie が消去され、確認のために Google アカウントに再ログインする必要がある場合に、エラーを再現します。
セッション ID などを保存しようとしましたが、リクエスト パラメータに初期ビューと同じリクエスト データが含まれていないため、取得しようとしているデータに競合があります。
ユーザーは、資格情報モデルの標準 Django ライブラリを使用してログインします。
コード
FLOW = flow_from_clientsecrets(
CLIENT_SECRETS,
scope='https://www.googleapis.com/auth/calendar.readonly',
redirect_uri='http://127.0.0.1:8000/oauth2callback')
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' 認証検証を扱うメイン関数 '''''''''''''''''''''''''''''''''''''''' ''''''''
def index(request):
current_user = User.objects.get(username=request.user.username)
storage = Storage(CredentialsModel, 'id', current_user, 'credential')
credential = storage.get()
if credential is None or credential.invalid == True:
FLOW.params['state'] = xsrfutil.generate_token(settings.SECRET_KEY,
request.user.id)
authorize_url = FLOW.step1_get_authorize_url()
return redirect(authorize_url)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''''' 認証後、ユーザーはデータ関数を呼び出します'''
def auth_return(request):
print("THE CURRENTLY REQUESTED USER IN THIS SESSION REQUEST IS %s"%(request.user.username))
credential = FLOW.step2_exchange(request.REQUEST)
try:
current_user = User.objects.get(id=request.user.id)
except:
return HttpResponseRedirect("/login")
storage = Storage(CredentialsModel, 'id', current_user, 'credential')
storage.put(credential)
return HttpResponseRedirect("/get_cal")