Flask の Flask-Oauth アドオンを使用して Twitter で認証しています。基本的にドキュメントの正確なコードを使用していますが、インデックスに戻るためのリダイレクトは発生していないようです。または、それが発生している場合は、奇妙なブラウザ キャッシングが行われています。
私のホームページは基本的に次のようになります。
@app.route('/', methods=['GET'])
def home():
form = SadForm()
if not g.user:
needs_login = True
else:
# get some user stuff to display
return render_template(...)
そのページには、ドキュメントに一致するログイン ビューに移動するボタンがあります。
@app.route('/login')
def login():
return twitter.authorize(callback=url_for('oauth_authorized',
next=request.args.get('next') or request.referrer or None))
そこにあるコールバックは、次のビューでカバーされています。
@app.route('/oauth-authorized')
@twitter.authorized_handler
def oauth_authorized(response):
next_url = request.args.get('next') or url_for('home')
if response is None:
flash(u'You denied the request to sign in.')
return redirect(next_url)
session['user_id'] = response['screen_name']
current_user = g.db.users.find_one({'user_id': response['screen_name']})
if current_user:
user = current_user
else:
user = {}
user['user_id'] = response['screen_name']
user['twitter_token'] = response['oauth_token']
user['twitter_secret'] = response['oauth_token_secret']
g.user = user.copy()
g.db.users.save(user)
flash('You were signed in.')
return redirect(next_url)
ユーザーのコンテンツが表示されるようにhome
設定したため、このメソッドの最後のリダイレクトはビューを「更新」する必要があるようです。g.user
ただし、実際には、ホームページは誰もログインしていないと見なしますが、ブラウザ ボタンを使用してページを更新すると、ログインしていることを認識して正しいデータを表示します。
サーバーのログは次のようになります。
21:39:36 INFO werkzeug - 127.0.0.1 - - [28/Dec/2012 21:39:36] "GET / HTTP/1.1" 200 -
21:39:45 INFO werkzeug - 127.0.0.1 - - [28/Dec/2012 21:39:45] "GET /login HTTP/1.1" 302 -
21:39:47 INFO werkzeug - 127.0.0.1 - - [28/Dec/2012 21:39:47] "GET /oauth-authorized?oauth_token=nope&oauth_verifier=beep HTTP/1.1" 302 -
の 302 の後に "GET /" の 200 がないことに注意してくださいoauth-authorized
。あっていいんじゃない?