我正在使用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'))
答案 0 :(得分:0)
尝试更改
account_info = blueprint.session.get('/user')
到
account_info = blueprint.session.get('/oauth2/v2/userinfo')
如果您愿意,可以在这里查看我的工作要点:
https://gist.github.com/ericcgu/6eae82aa99a37e6a4369cd5513fc4a54