def facebook_callback(resp): next_url = request.args.get('next') or url_for('index') if resp is None or 'access_token' not in resp: flash('You denied the login') return redirect(next_url) session['fb_access_token'] = (resp['access_token'], '') remember_me = False if 'remember_me' in session: remember_me = session['remember_me'] session.pop('remember_me', None) fb_user = facebook.get('/me') fb_id = me.data['id'] fb_email = me.data['email'] if fb_user.data['username']: fb_username = fb_user.data['username'] else: fb_username = fb_user.data['name'] user = dq.find(User, ['facebook_id'], [str(fb_id)]).first() #for connecting user's acc with facebook acc if g.user is not None and g.user.is_authenticated(): if user is None: dq.update(g.user, ['facebook_id'], [str(fb_id)]) flash('You are now linked with %s' % fb_username) else: flash('Your fb account has been linked previously') return redirect(url_for('settings')) #for new login if user is None: u = dq.find(User, ['email'], [str(fb_email)]).first() if u: login_user(u, remember = remember_me) return facebook.authorize(callback=url_for('facebook_callback', next=request.args.get('next') or request.referrer or None, _external=True)) else: dq.init_user(fb_username, fb_email, ROLE_USER, None, None, str(fb_id), None, None) login_user(user, remember = remember_me) flash('You are now logged in as %s' % user.nickname) return redirect(url_for('index'))
def after_login(resp): if resp.email is None or resp.email == "": flash('Invalid Login. Please try again.') redirect(url_for('login')) user = dq.find(User, ['email'], [resp.email]).first() if user is None: user = dq.init_user(resp.nickname, resp.email, ROLE_USER, None, None, None, None, None) remember_me = False if 'remember_me' in session: remember_me = session['remember_me'] session.pop('remember_me', None) login_user(user, remember = remember_me) return redirect(request.args.get('next') or url_for('index'))
def weibo_callback(): code = request.args.get('code') r = client.request_access_token(code) access_token = r.access_token expires_in = r.expires_in session['wb_access_token'] = access_token session['wb_expires_in'] = expires_in client.set_access_token(access_token, expires_in) wb_id = client.account.get_uid.get()['uid'] next_url = request.args.get('next') or url_for('index') #for connecting user's acc with weibo acc if g.user is not None and g.user.is_authenticated(): if r is None or r.access_token is None: flash('You denied the connection') return redirect(next_url) if dq.find(User, ['weibo_id'], [str(wb_id)]).first() is None: dq.update(g.user, ['weibo_id'], [str(wb_id)]) flash('You are now linked with %s' % client.users.show.get(uid=wb_id)['screen_name']) else: flash('Your weibo account has been linked previously') return redirect(url_for('settings')) #for login else: if r is None or r.access_token is None: flash('You denied the login') return redirect(next_url) #user data from server wb_email = client.account.profile.email.get(access_token=access_token)['email'] weibo_user = client.users.show.get(uid=wb_id) wb_nickname = weibo_user['screen_name'] wb_img = weibo_user['avatar_large'] user = dq.find(User, ['weibo_id'], [str(wb_id)]).first() #cannot find a user with the current weibo id if user is None: u = dq.find(User, ['email'], [str(wb_email)]).first() # email taken if u: login_user(u, remember = remember_me) return redirect(url) # email not taken else: dq.init_user(wb_nickname, wb_email, ROLE_USER, str(wb_id), wb_img, None, None, None) #client.statuses.update.post(status=u'test oauth2.0') remember_me = False if 'remember_me' in session: remember_me = session['remember_me'] session.pop('remember_me', None) login_user(user, remember = remember_me) flash('You are now logged in as %s' % user.nickname) return redirect(url_for('index'))