我正在向服务器发送一个Facebook令牌,以使用Python社交身份验证进行身份验证。在
在发送获取身份验证的帖子时,我得到的错误是:
Traceback: File "/Library/Python/2.7/site-packages/django/core/handlers/base.py" in get_response
111. response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/Library/Python/2.7/site-packages/django/views/decorators/csrf.py" in wrapped_view
57. return view_func(*args, **kwargs) File "/Library/Python/2.7/site-packages/django/views/generic/base.py" in view
69. return self.dispatch(request, *args, **kwargs) File "/Library/Python/2.7/site-packages/rest_framework/views.py" in dispatch
407. response = self.handle_exception(exc) File "/Library/Python/2.7/site-packages/rest_framework/views.py" in dispatch
404. response = handler(request, *args, **kwargs) File "/Users/vedantdasswain/GitRepositories/MovieMiner/Django/MovieMiner/mine/views.py" in post
45. token, created = Token.objects.get_or_create(user=user) File "/Library/Python/2.7/site-packages/django/db/models/manager.py" in manager_method
92. return getattr(self.get_queryset(), name)(*args, **kwargs) File "/Library/Python/2.7/site-packages/django/db/models/query.py" in get_or_create
424. return self._create_object_from_params(lookup, params) File "/Library/Python/2.7/site-packages/django/db/models/query.py" in _create_object_from_params
454. obj = self.model(**params) File "/Library/Python/2.7/site-packages/django/db/models/base.py" in __init__
440. setattr(self, field.name, rel_obj) File "/Library/Python/2.7/site-packages/django/db/models/fields/related.py" in __set__
597. self.field.rel.to._meta.object_name,
Exception Type: ValueError at /api-auth/facebook/ Exception Value: Cannot assign "<UserProfile: VedantDasSwain>": "Token.user" must be a "User" instance.
我使用的自定义用户模型如下所示:
^{pr2}$这是处理请求的视图:
class ObtainAuthToken(APIView):
throttle_classes = ()
permission_classes = ()
authentication_classes = ()
parser_classes = (FormParser, MultiPartParser, JSONParser,)
renderer_classes = (JSONRenderer,)
serializer_class = AuthTokenSerializer
model = Token
# Accept backend as a parameter and 'auth' for a login / pass
def post(self, request, backend):
if backend == 'auth':
serializer = self.serializer_class(data=request.DATA)
if serializer.is_valid():
token, created = Token.objects.get_or_create(user=serializer.object['user'])
return Response({'token': token.key})
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
else:
# Here we call PSA to authenticate like we would if we used PSA on server side.
print 'calling PSA'
user = register_by_access_token(request, backend)
# If user is active we get or create the REST token and send it back with user data
if user and user.is_active:
token, created = Token.objects.get_or_create(user=user)
return Response({'id': user.id, 'name': user.username, 'userRole': 'user', 'token': token.key})
@psa(redirect_uri=None)
def register_by_access_token(request, backend):
# Split by spaces and get the array
auth = get_authorization_header(request).split()
print auth
if not auth or auth[0].lower() != b'token':
msg = 'No token header provided.'
return msg
if len(auth) == 1:
msg = 'Invalid token header. No credentials provided.'
return msg
access_token = auth[1]
print access_token
# Real authentication takes place here
user = request.backend.do_auth(access_token)
print user
return user
def get_authorization_header(request):
print 'getting header'
return request.META['HTTP_AUTHORIZATION']
我甚至在我的设置.py公司名称:
AUTH_PROFILE_MODULE = 'mine.UserProfile'
SOCIAL_AUTH_USER_MODEL = 'mine.UserProfile'
有人能帮我吗。我不明白我为什么会犯这个错误。谢谢。在
UserProfileManager类中的create_user func不会保存用户。尝试添加
user.save()
相关问题 更多 >
编程相关推荐