2016-11-06 49 views
0

试图执行上的Django 1.10的OAuth2认证+ Python 3中,我得到这个错误:rauth:JSON对象必须str的,而不是 '字节'

rauth: the JSON object must be str, not 'bytes'

它发生就行了电话: session = sso.get_auth_session(data=data, decoder=json.loads)

如果我删除decoder=json.loads,我收到以下错误:

Decoder failed to handle access_token with data as returned by provider. A different decoder may be needed.

这里是我的方法:

def login(request): 
    """ 
    Login view 
    @author: Leonardo Pessoa 
    @since: 11/06/2016 
    """ 
    from rauth import OAuth2Service 
    from django.conf import settings 
    import json 

    # instantiating our login service with environment defined settings 
    sso = OAuth2Service(
     name    = settings.LOGIN_SETTINGS['name'], 
     client_id   = settings.LOGIN_SETTINGS['client_id'], 
     client_secret  = settings.LOGIN_SETTINGS['client_secret'], 
     access_token_url = settings.LOGIN_SETTINGS['access_token_url'], 
     authorize_url  = settings.LOGIN_SETTINGS['authorize_url'], 
     base_url   = settings.LOGIN_SETTINGS['base_url'], 
    ) 

    # check if we have a login code returned by OAuth 
    get_code = request.GET.get('code', '') 
    if get_code == '': 
     params = { 
      'redirect_uri' : settings.LOGIN_SETTINGS['redirect'], 
      'response_type' : 'code' 
     } 
     url = sso.get_authorize_url(**params) 

     return redirect(url) 
    else: 
     # we are in! 
     data = {'code'   : get_code, 
       'grant_type' : 'authorization_code', 
       'redirect_uri' : settings.LOGIN_SETTINGS['redirect'] 
       } 

     session = sso.get_auth_session(data=data, decoder=json.loads) 

     return redirect('/logado/') 

视图是首次访问的重定向到授权URL(无GET['code'])。接下来,再次访问它(使用GET['code'])来处理授权码并进行身份验证。

任何想法?

回答

1

我仍然认为应该有一些更直接的或错误修复到这一点,但这里是我自己的解决方法:

def oauth_decode(data): 
    import json 

    new_data = data.decode("utf-8", "strict") 

    return json.loads(new_data) 
... 
session = sso.get_auth_session(data=data, decoder=oauth_decode) 

的问题是,get_auth_session字节流从响应到UTF-8解码默认。如果你指定一个新的解码器,你可以覆盖它。所以我想我们需要在这里(UTF-8 + JSON)。

相关问题