2017-02-28 87 views
2

我試圖將django rest-auth和allauth一起用於reactjs前端應用程序的後端身份驗證過程。我不確定我的設置是否正確,或者這是否是一個錯誤。響應中不存在「uid」,它只攜帶從API傳遞的令牌。我認爲uid應來自現有用戶或來自新用戶的新用戶,並且「complete_login」應該通過那些用戶...Django rest-auth/allauth和weibo integration

如果有人有任何想法,請讓我知道。

全部低於回溯:

Traceback: 

File "/home/ubuntu/panbecopy/src/penv/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 
    149.      response = self.process_exception_by_middleware(e, request) 

File "/home/ubuntu/panbecopy/src/penv/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 
    147.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 

File "/home/ubuntu/panbecopy/src/penv/local/lib/python2.7/site-packages/django/views/decorators/csrf.py" in wrapped_view 
    58.   return view_func(*args, **kwargs) 

File "/home/ubuntu/panbecopy/src/penv/local/lib/python2.7/site-packages/django/views/generic/base.py" in view 
    68.    return self.dispatch(request, *args, **kwargs) 

File "/home/ubuntu/panbecopy/src/penv/local/lib/python2.7/site-packages/rest_framework/views.py" in dispatch 
    466.    response = self.handle_exception(exc) 

File "/home/ubuntu/panbecopy/src/penv/local/lib/python2.7/site-packages/rest_framework/views.py" in dispatch 
    463.    response = handler(request, *args, **kwargs) 

File "/home/ubuntu/panbecopy/src/penv/local/lib/python2.7/site-packages/rest_auth/views.py" in post 
    81.   self.serializer.is_valid(raise_exception=True) 

File "/home/ubuntu/panbecopy/src/penv/local/lib/python2.7/site-packages/rest_framework/serializers.py" in is_valid 
    213.     self._validated_data = self.run_validation(self.initial_data) 

File "/home/ubuntu/panbecopy/src/penv/local/lib/python2.7/site-packages/rest_framework/serializers.py" in run_validation 
    410.    value = self.validate(value) 

File "/home/ubuntu/panbecopy/src/penv/local/lib/python2.7/site-packages/rest_auth/registration/serializers.py" in validate 
    106.    login = self.get_social_login(adapter, app, token, access_token) 

File "/home/ubuntu/panbecopy/src/penv/local/lib/python2.7/site-packages/rest_auth/registration/serializers.py" in get_social_login 
    42.   social_login = adapter.complete_login(request, app, token, response=response) 

File "/home/ubuntu/panbecopy/src/penv/local/lib/python2.7/site-packages/allauth/socialaccount/providers/weibo/views.py" in complete_login 
    20.   uid = kwargs.get('response', {}).get('uid') 

Exception Type: AttributeError at /rest-auth/weibo/ 
Exception Value: 'unicode' object has no attribute 'get' 

回答

1

這意味着allauth沒有得到正確的用戶信息。您可以查看您使用的社交登錄的源代碼(views.py和provider.py)。例如,linkedin,

def complete_login(self, request, app, token, **kwargs): 
    extra_data = self.get_user_info(token) 
    return self.get_provider().sociallogin_from_response(
     request, extra_data) 

確保您使用了正確的參數(令牌,kwargs)。注意,不同社交認證插件的令牌參數是不同的。例如,對於linkedin,它只是字符串,但對於微博,它是

uid = kwargs.get('response', {}).get('uid') 

這意味着'響應'應該是一個字典。

如果以正確的格式使用了正確的參數,那就應該有效。

希望有所幫助。