GitHub-Flask授权范围问题

时间:2017-12-12 21:18:38

标签: python github flask github-api

我正在使用Github-Flask在我的应用上对用户进行身份验证。我使用github.authorize(scope='user:email')。如何获取登录用户的电子邮件?

github = GitHub(app)
user = None

@app.route('/login')
def login():
   if user.username: 
      return redirect(url_for('index'))

   return github.authorize(scope='user:email')

@github.access_token_getter
def token_getter():
   if user is not None:
      return user.github_access_token

@app.route('/github-callback')
@github.authorized_handler
def authorized(oauth_token):
    if oauth_token is None:
       flask.flash("Authorization failed.")
       return redirect(url_for('index'))

   global user
   user.username = oauth_token
   return redirect(url_for('index'))

1 个答案:

答案 0 :(得分:3)

login路由只是重定向到GitHub的授权页面,它无法访问用户数据,因为用户没有登录。一旦你到达{{ 1}}回调,你可以对GitHub进行API调用。

authorized路线中,使用github.get来调用user API端点。

authorized

此外,请勿使用data = github.get('user') email = data['email'] 来存储登录用户。请参阅Are global variables thread safe in flask?而是将用户ID存储在global user中,然后将用户加载到session,如GitHub-Flask's full example所示。