Flask-GoogleLogin

Flask-GoogleLogin extends Flask-Login to use Google OAuth2’s authorization.

Usage

Get started by creating a GoogleLogin instance:

from flask_googlelogin import GoogleLogin
googlelogin = GoogleLogin(app)
# or
googlelogin = GoogleLogin()
googlelogin.init_app(app)

A flask_login.LoginManager instance is implicitly created in GoogleLogin.init_app but you can also pass your own:

from flask_login import LoginManager
login_manager = LoginManager()
login_manager.init_app(app)
googlelogin = GoogleLogin(app, login_manager)

Next, you need to specify an OAuth2 callback route:

@app.route('/oauth2callback')
@googlelogin.oauth2callback
def create_or_update_user(token, userinfo, **params):
    user = User.filter_by(google_id=userinfo['id']).first()
    if user:
        user.name = userinfo['name']
        user.avatar = userinfo['picture']
    else:
        user = User(google_id=userinfo['id'],
                    name=userinfo['name'],
                    avatar=userinfo['picture'])
    db.session.add(user)
    db.session.flush()
    login_user(user)
    return redirect(url_for('index'))

Decorate views with flask_login.login_required and you’re done!

@app.route('/profile')
@login_required
def profile():
    return render_template('profile.html')

Get the Google auth URL using GoogleLogin.login_url. You can also include extra params to login_url and they’ll be passed to your GoogleLogin.oauth2callback:

googlelogin.login_url(params=dict(section='notifications', next=url_for('.profile')))

You can also configure Google auth url params:

googlelogin.login_url(approval_prompt='force', access_type='offline')
googlelogin.login_url(redirect_uri=url_for('admin'))

Configuration

Google API

GOOGLE_LOGIN_CLIENT_ID Client ID (create one at https://code.google.com/apis/console)
GOOGLE_LOGIN_CLIENT_SECRET Client Secret
GOOGLE_LOGIN_SCOPES Default scopes
GOOGLE_LOGIN_REDIRECT_URI Default redirect URI
GOOGLE_LOGIN_REDIRECT_SCHEME Scheme of redirect URI (defaults to http)

API