예제 #1
0
파일: views.py 프로젝트: wfwei/newstracker
def weiboLogin(request):
    # TODO: bug 目前还有错,不知道是哪儿的原因:
    # 用WeBless和新闻追踪007可以正常登录,但是用zzy和幸运女神的帐号登录就没有user_id!!!
    signed_request = request.POST.get('signed_request')
    # signed_request传到python这边, 数据结构是一个字符串型的list
    if isinstance(signed_request, list):
        signed_request = signed_request[0]
    encoded_sig, payload = signed_request.split(".", 2)

    # 余数2, 那么需要补一个=
    payload = str(payload)
    if len(payload) % 3 == 2:
        payload += '='
    # 余数1, 那么需要补两个=
    if len(payload) % 3 == 1:
        payload += '=='
    # urlsafe_b64decode() Decode string s using a URL-safe alphabet,
    # which substitutes - instead of + and _ instead of / in the standard Base64 alphabet.
    # 得到data
    data = simplejson.loads(base64.urlsafe_b64decode(payload))

    # 得到sig
    encoded_sig = str(encoded_sig)
    if len(encoded_sig) % 3 == 2:
        encoded_sig += '='
    if len(encoded_sig) % 3 == 1:
        encoded_sig += '=='
    sig = base64.urlsafe_b64decode(encoded_sig)

    try:
        user_id = data['user_id']
        oauth_token = data['oauth_token']
        expires = data['expires']
    except:
        print '认证错误,这个错误还未解决!!!'

    if _DEBUG:
        print 'signed_request: ', signed_request
        print 'data: ', data
        print user_id

    # #判断用户是否已经登录过(第一次登录会自动帮用户注册)
    try:
        _account = Account.objects.get(weiboId=user_id)
    except:
        print 'create new Account for:' + str(user_id)
        _weibo = weiboAPI(oauth_token, expires, user_id)
        _account = dbop.get_or_create_account_from_weibo(_weibo.getUserInfo())
    # # TODO: 如何实现用户自动登录??
    request.session['user'] = _account.user
    return HttpResponseRedirect('/home/')
예제 #2
0
파일: views.py 프로젝트: wfwei/newstracker
def weibo_callback(request):
    # 获取code
    code = request.GET.get('code')
    # 构建微博对象
    _wb = weiboAPI()
    _r = _wb.client.request_access_token(code)
    access_token = _r.access_token
    expires_in = _r.expires_in
    u_id = _r.uid
    _wb.client.set_access_token(access_token, expires_in)
    uinfo = _wb.getUserInfo(uid=u_id)
    # 保存授权信息
    _oauth = dbop.create_or_update_weibo_auth(u_id=u_id, access_token=access_token, expires_in=expires_in)
    _account = dbop.get_or_create_account_from_weibo(uinfo)
    _account.oauth = _oauth
    _account.save()
    _account.user.backend = 'django.contrib.auth.backends.ModelBackend'
    auth_login(request, _account.user)
    return HttpResponseRedirect('/home/')