Django all-auth实现Facebook登录遇KeyError:'access_token'求助
解决Django all-auth Facebook登录的KeyError: 'access_token'问题
我之前调试Django all-auth的Facebook登录时,也碰到过一模一样的KeyError: 'access_token'问题,结合踩过的坑,给你几个具体的排查方向:
先核对Facebook开发者后台的核心配置
这是最容易出错的环节:- 确保Valid OAuth Redirect URIs里添加了正确的回调地址:
https://你的域名/accounts/facebook/login/callback/(注意是callback不是报错里的token路径,all-auth的OAuth2回调默认走这个地址),本地测试用local.domain.com的话,也要把https://local.domain.com/accounts/facebook/login/callback/加进去,不能遗漏。 - 检查Django
settings.py里的SOCIALACCOUNT_PROVIDERS配置,App ID和Secret必须和Facebook后台完全一致,还要指定正确的Graph API版本(比如v18.0,别用太旧的版本),示例配置如下:SOCIALACCOUNT_PROVIDERS = { 'facebook': { 'APP': { 'client_id': '你的Facebook App ID', 'secret': '你的Facebook App Secret', 'key': '' }, 'METHOD': 'oauth2', 'SCOPE': ['email', 'public_profile'], 'VERSION': 'v18.0' } } - 如果你的App还在Development模式,记得把测试用户添加到Facebook后台的「测试用户」列表里,否则非测试用户无法触发授权流程。
- 确保Valid OAuth Redirect URIs里添加了正确的回调地址:
检查all-auth版本与Facebook API的兼容性
旧版本的django-all-auth可能不支持最新的Facebook Graph API,导致token交换流程出错。建议升级到django-all-auth的最新稳定版,同时确保配置里的VERSION和Facebook后台使用的API版本一致。排查请求流程中的token传递问题
KeyError: 'access_token'本质是all-auth在处理Facebook的响应时找不到token,可能是请求流程异常:- 打开Django调试模式,查看
/accounts/facebook/login/token/这个POST请求的具体参数,或者用浏览器开发者工具检查前端请求是否正确触发了OAuth2授权流程——如果自定义过登录模板或按钮,可能误跳过了授权步骤,直接调用了token端点。 - 确认没有在中间件或视图里拦截修改了Facebook返回的响应参数。
- 打开Django调试模式,查看
验证SSL配置的完整性
虽然你已经配置了SSL,但要确保:- 本地使用的SSL证书是浏览器信任的(比如用
mkcert生成本地可信证书),否则Facebook的授权请求可能被浏览器拦截,导致token无法正常返回。 - Django设置里
SECURE_SSL_REDIRECT = True,避免HTTP和HTTPS混合跳转导致会话或参数丢失。
- 本地使用的SSL证书是浏览器信任的(比如用
核对Django中间件配置
确保django.contrib.sessions.middleware.SessionMiddleware和django.contrib.auth.middleware.AuthenticationMiddleware在MIDDLEWARE列表中,all-auth依赖这些中间件处理会话和认证流程,缺失会导致token无法正确存储传递。
内容的提问来源于stack exchange,提问作者Ronald Langeveld
相关产品推荐
相关产品推荐

