私はoauth2を介してSinaWeiboクライアントを作成し、自分のWebサイトのアカウントで既にログインしている現在のユーザーに認証を追加しています。OAuth2はリダイレクトコールバックメカニズムを使用しているため、このルーチンの後、およびコールバックビューハンドラーでは、フラスコ.sessionは完全に新しいオブジェクトです。したがって、現在のユーザーのログインステータスを失いました。
しかし、同じブラウザ(Firefoxなど)で新しいタブを追加して私のサイトのホームページ(www.funfunsay.com)にアクセスしても、セッションオブジェクトはまだ存在しています!
したがって、同じブラウザインスタンスに2つのflask.sessionがありますか?
私は非常に単純なモジュールを作成しました。古いセッションを失ったことを除けば、Sinaweiboとうまく合います。
# -*- 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:テスト目的で、hostsファイルに「127.0.0.1www.funfunsay.com」を追加します。