我正在为ATK4使用OAuth Facebook控制器附加组件。
更重要的是,它适用于移动浏览器的注册(即,当Facebook要求用户授予应用程序权限时)。
登录流程停止,错误500位于: https://m.facebook.com/dialog/oauth?redirect_uri= {my_url_encoded_landing_page_where_the_OAuth_controller_lives}&安培;范围=电子邮件&安培; 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创建一个新的应用程序,我在基本的vanilla配置上遇到了同样的问题。我只标记并指定了“网站与Facebook登录”网站URL集成。
在将用户代理覆盖到移动设备以触发转发到Facebook的移动服务器之后,从Chrome中捕获了以下图片: Screen shot of request
Facebook关闭了我的错误报告,声称这不是问题,因为没有其他人报告错误。我正在移除ATK4标签,因为我在GIT上使用Facebook提供的示例PHP代码得到同样的问题。答案 0 :(得分:1)
此处创建了专门的示例: http://demo.ambienttech.lv/d.html?ns=d3
示例可下载,并包含设置Facebook应用程序的说明。看看是否有帮助。
试试这个:
<?php
class page_fb extends Page {
function init(){
parent::init();
$f = $this->add("oauth/Controller_OAuth_Facebook");
$fbtoken = $this->api->recall("fbtoken");
if ($m = $_GET["error_msg"]){
$v=$this->add("View_Error");
$v->add("Text")->setHTML("You can't connect to the application.");
$v->add("Button")->setHTML("Try again")->js("click", $this->js()->univ()->location("fb"));
return;
}
if (!$fbtoken){
if ($fbtoken = $f->check("email")){
$this->api->memorize("fbtoken", $fbtoken);
$this->api->redirect($this->api->url("/index"));
}
} else {
$f->setSignatureInfo();
$f->setAuthToken($fbtoken["access_token"], $fbtoken["expires"]);
$c = $this->add("sni/Controller_SNI_Facebook");
$c->setOAuth($f);
if (!$this->api->recall("fbuserinfo")){
$this->api->memorize("fbuserinfo", $c->getUserProfile());
}
$info = $this->api->recall("fbuserinfo");
$username = $info->username;
$img = $c->customRequest("/" . $username . "/picture?type=large");
$this->api->memorize("userimg", $img);
$this->api->memorize("userinfo", $info);
if (!$this->api->auth->isLoggedIn()){
$this->api->auth->login($info->email);
}
$this->api->redirect($this->api->url("/index"));
}
}
}
答案 1 :(得分:1)
我遇到了同样的问题,但是使用PHP:只是使用移动网络浏览器无效,导致'500内部服务器错误'。
我只是问自己是否存在方法getLoginUrl的参数,以强制返回非移动版本的身份验证页面...
答案 2 :(得分:0)
我在此处报告此问题:https://github.com/atk4/atk4-addons/issues/35
请继续关注,如果可以,您可以随时自行更改并提出请求。 我无法测试和解决这个问题因为奇怪的是我还没有智能手机:(
答案 3 :(得分:0)
FB的移动OAuth服务中发生了一些导致错误的内容。我使用较短的网址(即http://domain.net/fb/而不是http://development.project.domain.net/fb)运行了我的代码测试,它运行正常。我不完全确定究竟是什么导致了这个问题,因为Facebook拒绝承认这个问题是在他们的服务器上,但我有一些可能的罪魁祸首可能引发他们的错误,但由于他们不关心,我也没有,我正在为遇到这个bs的其他人提供我的结果。
我不会再对此进行测试,因为它确实是Facebook的问题,而不是我的代码或服务器,它将在生产中发挥作用。