def login_by_github_callback(): """Github OAuth 回调 """ code, info = OAuthSignIn.get_provider('github').callback() if code is None: raise OAuthFail() user = User.query.filter_by(github_id = info.get('id')).first() if user is None: user = User( github_id = info.get('id'), nickname = info.get('login'), name = info.get('name'), avatar = info.get('avatar_url'), bio = info.get('bio'), ) db.session.add(user) # update github info user.github_login = info.get('login') user.github_email = info.get('email') user.github_name = info.get('name') # update oauth code user.oauth_code = code db.session.commit() # 如果是admin来请求oauth if request.referrer == url_for('admin.admin_login', _external = True): if user.github_email in current_app.config['TECHSHOW_ADMIN']: login_user(user) return redirect(url_for('admin.admin_index')) return render_template('oauth_pending.html', oauth_logo = '/static/images/github_logo.png')