2017-02-28 79 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') 

这意味着'响应'应该是一个字典。

如果以正确的格式使用了正确的参数,那就应该有效。

希望有所帮助。