【发布时间】:2024-04-24 15:05:01
【问题描述】:
我尝试使用 Django AllAuth 通过 Facebook 注册用户。
我必须制作一个 REST API,所以我会使用 Django REST Framework。
我发现这个简单的tutorial 来进行第一个用户注册,但可能与当前的实现有些不同:
我试过这段代码:
def post(self, request):
data = JSONParser().parse(request)
access_token = data.get('access_token', '')
try:
app = SocialApp.objects.get(provider="facebook")
token = SocialToken(app=app, token=access_token)
# check token against facebook
login = fb_complete_login(app, token)
login.token = token
login.state = SocialLogin.state_from_request(request)
# add or update the user into users table
ret = complete_social_login(request, login)
# if we get here we've succeeded
return Response(status=200, data={
'success': True,
'username': request.user.username,
'user_id': request.user.pk,
})
except:
traceback.print_exc()
return Response(status=401, data={
'success': False,
'reason': "Bad Access Token",
})
但现在我看到 fb_complete_login 采用 3 个参数:request、app 和 token。
因此,我尝试将请求也像此函数参数一样放入,但稍后我在 login = fb_complete_login(app, token) 上出现错误。
TypeError: add_message() 参数必须是 HttpRequest 对象,而不是 '请求'。
欢迎提出任何建议!
【问题讨论】:
-
它试图将 Django 的消息传递系统与 Django Rest Framework 请求对象(“请求”)一起使用,而不是它所期望的 HttpRequest 对象。我有类似的问题,不确定这是配置还是错误。作为快速修复,您可以在 settings.py 中禁用“django.contrib.messages”。
标签: python django facebook django-rest-framework django-allauth