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)
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)