2017-12-12 11 views
3

私はGithub-Flaskを使用して、自分のアプリでユーザーを認証しています。私はgithub.authorize(scope='user:email')を使用します。ログインしたユーザーの電子メールを取得するにはどうすればよいですか?GitHub-Flaskスコープ認可の問題

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')) 

答えて

3

loginルートは、ユーザーがログインしていないので、それはまだユーザーデータにアクセスする方法がない、GitHubでの認証ページにリダイレクトされています。あなたはauthorizedコールバックを取得したら、API呼び出しを行うことができますGitHubに。

authorizedルートでは、github.getを使用してuser APIエンドポイントを呼び出します。

data = github.get('user') 
email = data['email'] 

また、ログインしているユーザーを保存するためにglobal userを使用しないでください。 Are global variables thread safe in flask?を参照してください。代わりにsessionにユーザーIDを格納し、GitHub-Flask's full exampleに示すように、ユーザーをgに読み込みます。