def callback(): if current_user is not None and current_user.is_authenticated: return redirect(url_for('main.home')) if 'error' in request.args: if request.args.get('error') == 'access_denied': flash('You denied access.', 'danger') else: flash('Error occured', 'danger') return redirect(url_for('users.login')) if 'code' not in request.args or 'state' not in request.args: flash('Error Occurred! Please try again.') return redirect(url_for('users.login')) else: print() print('code: ', request.args.get('code')) print('request.url: ', request.url) print() oauth = get_google_auth(state=session['oauth_state']) try: token = oauth.fetch_token(Auth.TOKEN_URI, client_secret=Auth.CLIENT_SECRET, authorization_response=request.url) except Exception as e: print("Error: ", e) flash('Error Occurred while getting access token', 'danger') return redirect(url_for('users.login')) resp = oauth.get(Auth.USER_INFO) if resp.status_code == 200: user_data = resp.json() email = user_data['email'] # print() # print(user_data) # print('Name: ',user_data['name']) # print('Email: ',user_data['email']) # print('Picture link: ',user_data['picture']) # print() user = User.query.filter_by(email=email).first() if user is not None: if user.login_using != 'Google': flash( f'You have not used Google to login before. Please use email and password to login!', 'danger') return redirect(url_for('users.login')) flash(f'Welcome back, {user.username}.', 'success') user.login_using = 'Google' else: user = User() user.username = username_from_email(email, User) user.first_name = user_data['given_name'] user.last_name = user_data['family_name'] user.email = email user.avatar_link = user_data['picture'] user.image_file = save_picture_from_url(user_data['picture']) user.tokens = json.dumps(token) user.login_using = 'Google' flash(f'Welcome, {user.username}.', 'success') db.session.add(user) db.session.commit() login_user(user) return redirect(url_for('main.home')) else: flash('Could not fetch your information', 'danger') return redirect(url_for('users.login'))