akshansh
akshansh

Reputation: 21

Redirect User to original URL after Google login in Flask

I have implemented flask-dance and authlib Flask client for Google sign-in, one answer was unclear in all implementations were how to redirect a user to original user once they login. For example, a flow I wanted => clicks on /results checks if not logged in redirect to login makes them login and then again redirects back to results with logged in session.

I saw some answers using state and kwargs addition but didn't see any clear answer or a pseudo code implementation.

If you have implemented such a scenario please answer the question it will help a lot or you can also reference to your Github projects if implemented

Upvotes: 1

Views: 924

Answers (1)

akshansh
akshansh

Reputation: 21

The simple solution i discovered to my own problem was in any implementation for any such library use a session variable to record orignal url and then redirect user after login using that variable so in here i have used next param variable which stores it temp then once authorized sends user to orignal url what they asked for

see the code below

@app.route('/login')
def login():
    google = oauth.create_client('google')  
    redirect_uri = url_for('authorize', _external=True)
    return google.authorize_redirect(redirect_uri)


@app.route("/dashboard")
def protect():
    if not session.get('profile'):
        session['next']='/dashboard'
        return redirect('/login')

    if session['profile']:
        #load dashboard

    else:
        return "forbidden"        


@app.route('/authorize')
def authorize():
    google = oauth.create_client('google')  
    token = google.authorize_access_token() 
    resp = google.get('userinfo')  
    user_info = resp.json()
    user = oauth.google.userinfo()
    session['profile'] = user_info
    session.permanent = True
    redirecti=session.get("next",None)
    return redirect(redirecti)   

Upvotes: 1

Related Questions