我正在使用 ATK4 的 OAuth Facebook 控制器插件。
- 从常规桌面浏览器向 Facebook 进行身份验证时,它按预期工作。
- 当使用告诉 facebook 它是桌面浏览器的移动浏览器进行身份验证时,它可以工作。
- 当 Facebook 检测到移动浏览器并重定向到 m.facebook.com/dialog/oath 时,它不起作用。
更重要的是,它适用于来自移动浏览器的注册(即,当 Facebook 要求用户授予应用程序许可时)。
登录流程在以下位置停止并出现错误 500: https ://m.facebook.com/dialog/oauth? redirect_uri= {my_url_encoded_landing_page_where_the_OAuth_controller_lives}&scope=email&client_id={fb_app_id}
这到底是怎么回事?Facebook 移动服务与插件没有处理的常规服务之间没有什么区别,或者有吗?
这一定是我做错了什么。在处理 FB 的页面上的 init() 中,我正在执行以下操作:
function init(){
parent::init();
$f = $this->add("oauth/Controller_OAuth_Facebook", array('sign_method'=>'PLAINTEXT'));
if ($fbtoken = $f->check()) {
$f->setSignatureInfo();
$f->setAuthToken($fbtoken["access_token"], $fbtoken["expires"]);
$s = $this->add("sni/Controller_SNI_Facebook");
$s->setOAuth($f);
// ...
// grab profile from SNI, database lookup, session stuff, etc
// ...
}
}
我已经尝试了所有三种sign_methods,并尝试将其单独放置,但这并没有太大的区别,因为用户无论如何都没有使用访问令牌将其返回到控制器。
我尝试使用 Facebook 创建一个新应用程序,但我遇到了与基本普通配置相同的问题。我只标记并指定了“带有 Facebook 登录的网站”站点 URL 集成。
下图是在将用户代理覆盖到移动设备以触发转发到 facebook 的移动服务器后从 Chrome 捕获的: 请求的屏幕截图
Facebook 与他们关闭了我的错误报告,称这不是问题,因为没有其他人报告错误。我正在删除 ATK4 标记,因为我使用 Facebook 在 GIT 上提供的示例 PHP 代码遇到了同样的问题。