OAuth2はリダイレクトコールバックメカニズムを使用しているため、自分のWebサイトのアカウントで既にログインしているユーザーに認証を追加するには、oauth2経由でSina Weiboクライアントを作成しています。このルーチンの後、コールバック・ビュー・ハンドラではフラスコ・セッションは完全に新しいオブジェクトです。したがって、私は現在のユーザーのログイン状況を失った。oath2コールバック時にflask.sessionオブジェクトを再開する方法
しかし、新しいタブを追加して自分のサイトのホームページ(www.funfunsay.com)にアクセスするのと同じブラウザ(Firefoxなど)では、セッションオブジェクトはまだ存在します。
同じブラウザインスタンスに2つのflask.sessionがありますか?
私はシンプルなモジュールを書いていますが、私は古いセッションを失った以外はSina weiboとよく似ています。
# -*- coding: utf-8 -*-
from flask import (Flask, render_template, current_app, request,
flash, url_for, redirect, session, g, abort)
# For import *
__all__ = ['create_app']
app = Flask(__name__)
app.config['DEBUG'] = True
app.secret_key = 'secret key'
@app.before_request
def before_request():
print "before request:", session
#<1st output>for first visit www.funfunsay.com, the output is: before request: <SecureCookieSession {}>
#<3rd output>for callback from sina, the output is the same
@app.after_request
def after(response):
print "after request:", session
#<2nd output>for first visit www.funfunsay.com, the output is: after request: <SecureCookieSession {'testinfo': 'abc'}*>
return response
@app.route('/')
def hello_world():
print "request:", request
login_uri = 'https://api.weibo.com/oauth2/authorize?redirect_uri=http%3A//funfunsay.com/connect/sina/callback&response_type=code&client_id=3921006605&display=default'
session['testinfo'] = 'abc' #a key-value for test
return redirect(login_uri)
@app.route("/connect/sina/callback")
def connect_sina_callback():
print "connect_sina_callback: ", session
#<4th output>will output: connect_sina_callback: <SecureCookieSession {}>
return 'Callback success!'
if __name__ == '__main__':
app.run('0.0.0.0', 80)
PS:テスト目的で、私はホストファイルに "127.0.0.1 www.funfunsay.com"を追加します。
私はこの奇妙な現象を発見しました: 私は私のコールバックURL文字列、 で「www.my-site-addr.com」を使用 その後、「my-site-addr.com」を入力、Firefoxブラウザを起動して、 enterを押すと、セッションはコールバックでクリアされました。 Firefoxブラウザを起動し、「www.my-site-addr.com」と入力してEnterキーを押すと、セッションはまだそこにありました! なぜですか? – Brent81