You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Facebook Login使用Django Rest Auth返回"Incorrect value"非字段错误如何解决

解决方案

你遇到的Incorrect value400报错,是因为当前使用的django-rest-auth 0.9.5版本默认的Facebook登录逻辑和你传参场景不匹配,默认适配的是前端授权后带回调code的场景,而非直接传access_token的场景,和你之前自定义Google适配器适配id_token验签的逻辑一致,Facebook也需要自定义适配器适配。

步骤1:自定义Facebook OAuth2适配器

在你的views.py中添加如下代码:

import requests
from allauth.socialaccount.providers.facebook.views import FacebookOAuth2Adapter

class FacebookOAuth2AdapterAccessToken(FacebookOAuth2Adapter):
    def complete_login(self, request, app, token, **kwargs):
        # 用传入的access_token直接请求Facebook接口拉取用户信息
        resp = requests.get(
            'https://graph.facebook.com/me',
            params={
                'fields': 'id,email,name',
                'access_token': token.token,
            }
        )
        resp.raise_for_status()
        extra_data = resp.json()
        # 校验返回的用户id是否存在
        if 'id' not in extra_data:
            raise ValueError('Invalid Facebook access token')
        # 生成social login对象
        login = self.get_provider().sociallogin_from_response(request, extra_data)
        return login

步骤2:修改FacebookLogin视图的适配器配置

把你原来的FacebookLogin类替换成如下代码:

class FacebookLogin(SocialLoginView):
    adapter_class = FacebookOAuth2AdapterAccessToken
    client_class = OAuth2Client

    def get_serializer(self, *args, **kwargs):
        serializer_class = self.get_serializer_class()
        kwargs['context'] = self.get_serializer_context()
        return serializer_class(*args, **kwargs)

步骤3:校验请求参数与配置

  • 确保请求POST参数的key为access_token,不要拼写错误
  • 确认你后端settings.py中配置了正确的Facebook应用参数:
    SOCIALACCOUNT_PROVIDERS = {
        'facebook': {
            'APP': {
                'client_id': '你的Facebook应用ID',
                'secret': '你的Facebook应用密钥',
                'key': ''
            },
            'SCOPE': ['email', 'public_profile'],
            'AUTH_PARAMS': {'auth_type': 'reauthenticate'},
            'METHOD': 'oauth2',
            'VERIFIED_EMAIL': False,
            'VERSION': 'v18.0'
        }
    }
    
  • 确认前端请求的access_token是使用和后端相同的Facebook应用ID申请的,且Facebook应用已发布,允许的域名包含你项目的前端/后端域名。

内容的提问来源于stack exchange,提问作者Harsh Sonawane

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 07:09:06