Beispiel #1
0
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'))
Beispiel #2
0
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'))
Beispiel #3
0
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'))