flask - Flask-Dance @oauth_authorized.connect_via() 方法在登录时永远不会执行
问题描述
我正在使用 Flask-Dance 库通过 Google 登录用户。我能够成功验证用户身份,但 @oauth_authorized.connect_via(google_blueprint) 下的代码永远不会执行。我尝试重命名一些蓝图/方法,但似乎没有任何效果。我知道这个问题是特定于谷歌登录的,因为我在 twitter 和 github 上尝试了同样的代码,一切都很完美。我是否缺少关于谷歌登录的特定概念?
代码:
google_blueprint = make_google_blueprint(client_id='CLIENT_ID_HERE',client_secret='SECRET_HERE')
app.register_blueprint(google_blueprint,url_prefix='/google_login')
google_blueprint.backend = SQLAlchemyBackend(OAuth, db.session,user=current_user,user_required=False)
class User(UserMixin, db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(15), unique=True)
email = db.Column(db.String(50), unique=True)
password = db.Column(db.String(80))
payed = db.Column(db.Boolean)
class OAuth(OAuthConsumerMixin, db.Model):
user_id = db.Column(db.Integer,db.ForeignKey(User.id))
user = db.relationship(User)
@app.route('/google')
def google_login():
if not google.authorized:
return redirect(url_for('google.login'))
return redirect(url_for('dashboard'))
@oauth_authorized.connect_via(google_blueprint)
def google_is_logged_in(blueprint,token):
global paying_dude
account_info = blueprint.session.get('/user')
if account_info.ok:
account_info_json = account_info.json()
username = account_info_json['first_name']
query = User.query.filter_by(username=username)
try:
user=query.one()
except NoResultFound:
user = User(username=username,payed=False)
db.session.add(user)
db.session.commit()
paying_dude = username
return redirect(url_for('pay'))
if user.payed:
login_user(user)
return redirect(url_for('dashboard'))
return redirect(url_for('pay'))
解决方案
尝试改变
account_info = blueprint.session.get('/user')
至
account_info = blueprint.session.get('/oauth2/v2/userinfo')
如果你很感兴趣,可以在这里查看我的工作要点:
https://gist.github.com/ericcgu/6eae82aa99a37e6a4369cd5513fc4a54
推荐阅读
- html - 其他页面看不到布局页面
- python-3.x - Odoo:在创建时在另一个模型的 many2one 字段中保存当前 ID
- angular - 无法解析Angular中类的所有参数
- uwp - UWP 中的图像下降被相关面板包围
- firebase - 旧版 GCE 和 GKE 元数据服务器端点和 Firebase 函数
- python - 如何将凌乱的 csv 文件清理并构建成 pandas 数据框
- javascript - 如何使用户上传的图片自动调整到我的 PHP 网站上的特定宽度和高度而不破坏尺寸?
- c# - smtp.gmail.com - 无法从网站工作 - Hostgator 服务器
- kentico - Kentico 11 - 管理员门户样式损坏
- javascript - 如何在javascript中更改数组的数据?