使用 Django Allauth 注册 Facebook 用户
Registration Facebook user with Django Allauth
我尝试使用 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() argument must be an HttpRequest object, not
'Request'.
欢迎提出任何建议!
此处给出的解决方案:http://tech.agilitynerd.com/django-rest-registration-with-django-rest-auth.html
要仅针对 allauth 禁用消息传递,请覆盖适配器(例如在 main.adapters 中):
from allauth.account.adapter import DefaultAccountAdapter
class MessageFreeAdapter(DefaultAccountAdapter):
def add_message(self, request, level, message_template,
message_context=None, extra_tags=''):
pass
然后在 settings.py 中添加:
ACCOUNT_ADAPTER = 'main.adapters.MessageFreeAdapter'
我尝试使用 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() argument must be an HttpRequest object, not 'Request'.
欢迎提出任何建议!
此处给出的解决方案:http://tech.agilitynerd.com/django-rest-registration-with-django-rest-auth.html
要仅针对 allauth 禁用消息传递,请覆盖适配器(例如在 main.adapters 中):
from allauth.account.adapter import DefaultAccountAdapter
class MessageFreeAdapter(DefaultAccountAdapter):
def add_message(self, request, level, message_template,
message_context=None, extra_tags=''):
pass
然后在 settings.py 中添加:
ACCOUNT_ADAPTER = 'main.adapters.MessageFreeAdapter'