2016-11-06 16 views
0

+ Pythonの3 Djangoの1.10上のOAuth2認証を実装しようとすると、私はこのエラーを取得しています: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)。

関連する問題