2
我正在使用Flask-Oauth附加組件用於使用Twitter進行身份驗證。我基本上使用了文檔中的確切代碼,但重定向返回索引從未出現過。或者,如果發生這種情況,會出現一些奇怪的瀏覽器緩存。oauth身份驗證後重定向從未發生與flask-oauth
我的主頁基本上是這樣的:
@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 oauth-authorized
後沒有200的 「GET /」。不應該有嗎?
線程本地'g'對象不會在請求之間持續存在,除非您在'before_request'視圖或其他類似的位置引導它。如果你不這樣做,用戶對象不會被附加到'g'。但是,您說刷新時看到了正確的信息?所以我假設上述情況正在發生。但我仍然有點困惑,瀏覽器是否重定向?你應該看到索引的請求,是的。 – maxcountryman