gpt4 book ai didi

python - oauth2回调时如何恢复flask.session对象

转载 作者:行者123 更新时间:2023-11-28 17:50:46 25 4
gpt4 key购买 nike

我是通过oauth2写新浪微博客户端给已经用自己网站账号登录的当前用户加认证的,由于OAuth2使用了redirect-callback机制,貌似在这个例程之后,在Callback View 中处理程序,flask.session 完全是一个新对象。因此我失去了当前用户的登录状态。

但在同一个浏览器(如Firefox)中添加一个新标签并访问我网站的主页(www.funfunsay.com), session 对象仍然存在!

所以在同一个浏览器实例中有两个flask.session???

我写了一个很简单的模块,除了老session丢了,新浪微博用起来还不错。

# -*- 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”。

最佳答案

只要保持域名的一致性即可。我的解决方案总是使用“www.my-web-site.com”,如果用户输入“my-web-site.com”,则将他们重定向到“www.my-web-site.com”。现在一切正常!

关于python - oauth2回调时如何恢复flask.session对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10551412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com