Ejemplo n.º 1
0
def douban_callback(request):
    request_key = request.GET.get('oauth_token')
    request_secret = request.session.get('douban_request_secret')
    auth = pydouban.Auth(key=settings.DOUBAN_API_KEY, \
            secret=settings.DOUBAN_SECRET)

    access_tokens = auth.get_acs_token(request_key, request_secret)
    tokens = parse_qs(access_tokens)
    '''
    {'douban_user_id': ['45742059'], 'oauth_token': ['bbef8848bf48657033ce98da3dd93050'], 'oauth_token_secret': ['b2302cccf9a9ef79']}
    '''
    request.session['douban_token'] = tokens['oauth_token'][0]
    request.session['douban_token_secret'] = tokens['oauth_token_secret'][0]
    request.session['douban_user_id'] = tokens['douban_user_id'][0]
    
    user = request.user
    if request.session['douban_oauth_type'] == 'login':
        # Create a new Douban user if not exist
        douban_id = request.session['douban_user_id']
        user = create_or_update_user(douban_id, 'douban', \
                first_name=tokens['oauth_token'][0], \
                last_name=tokens['oauth_token_secret'][0])
        user = authenticate(username='******'+douban_id, password='******')
        assert user is not None
        if user is not None:
            login(request, user)

    # Make sure to save the access_tokens
    profile = user.get_profile()
    douban_tokens = request.session['douban_token'] + '@' + \
            request.session['douban_token_secret']
    profile.douban_tokens = douban_tokens
    profile.douban_id = request.session['douban_user_id']
    profile.save()

    assert profile.douban_tokens != None and profile.douban_tokens != ''
    assert profile.douban_id != None and profile.douban_id != ''

    messages.success(request, '豆瓣授权成功,可开启自动发布豆瓣广播')
    if 'douban_request_secret' in request.session:
        del request.session['douban_request_secret']
    next_url = request.session.get('next_url', '')
    if not next_url:
        next_url = reverse('accounts_profile')
    return HttpResponseRedirect(next_url)
Ejemplo n.º 2
0
def weibo_callback(request):
    client = weibo.APIClient(app_key=settings.WEIBO_API_KEY, \
            app_secret=settings.WEIBO_SECRET)
    # callback_url = 'http://%s%s' % \
    #         (request.META['HTTP_HOST'], reverse('weibo_callback'))
    callback_url = 'http://%s%s' % \
            (request.META['HTTP_HOST'], reverse('weibo_callback'))
    code = request.GET['code']
    token = client.request_access_token(code, redirect_uri=callback_url)
    '''
{'access_token': u'2.00Xe32uB0Sx3lC02e7ed88cbf31NcE', 'expires_in': 1336270249, 'remind_in': u'86399', 'uid': u'1748699617'}
    '''    
    client.set_access_token(token.access_token, token.expires_in)
    request.session['weibo_access_token'] = token.access_token
    request.session['weibo_user_id'] = token.uid

    # Create a new Weibo user if not exist
    weibo_id = request.session['weibo_user_id']
    user = request.user
    if request.session['weibo_oauth_type'] == 'login':
        user = create_or_update_user(weibo_id, 'weibo', \
                first_name=token.access_token, last_name=str(token.expires_in))
        user = authenticate(username='******'+weibo_id, password='******')
        assert user is not None
        if user is not None:
            login(request, user)

    # Make sure to save the access_tokens
    profile = user.get_profile()
    weibo_tokens = token.access_token + '@' + str(token.expires_in)
    profile.weibo_tokens = weibo_tokens
    profile.weibo_id = token.uid
    profile.save()

    assert profile.weibo_tokens != None and profile.weibo_tokens != ''
    assert profile.weibo_id != None and profile.weibo_id != ''

    messages.success(request, '微博授权成功,可开启自动发布微博')
    next_url = request.session.get('next_url', '')
    if not next_url:
        next_url = reverse('accounts_profile')
    return HttpResponseRedirect(next_url)