我正在尝试使用Facebook PHP SDK v5.6.1进行OAuth身份验证。
当浏览器返回重定向URL时,我无法交换访问令牌的授权代码。相反,我收到redirect_uri_mismatch
错误:
Invalid redirect: https://.../ callback does not match one of the registered values.
(文字可能不准确,因为必须翻译)
我调试了Facebook SDK,发现此错误的原因是在请求URL上传回的code
参数。通常,SDK会从PHP请求中推断出重定向URL,但是当我手动将重定向URL提供给没有code
参数的SDK时,令牌交换成功。
我的目标是使用最少的代码更改从旧版本升级SDK,因此我希望尽可能避免手动提供重定向网址。
在getAccessToken
SDK方法中,SDK会注意从URL中删除state
参数,但不会删除code
参数,这显然需要删除。
在Facebook Login
的应用设置中,我关闭了严格模式。
我还应该做些什么才能使请求网址成为重定向网址? 必须关闭一些东西,因为我没有看到其他人对此有任何问题。
答案 0 :(得分:0)
我仔细比较了不匹配的网址,发现其中一个是错误的。协议说https但它也指定了端口80。原来我的apache反向代理头文件配置错误。
RequestHeader set X-Forwarded-Proto 'https'
RequestHeader set X-Forwarded-Host 'hostname'
RequestHeader set X-Forwarded-Port '443'