2

在我的应用程序设置,我有作为移动网址这一个:Facebook应用程序不重定向移动网站的网址

https://example.herokuapp.com/mobile.php#&ui-state=dialog 

然而,当我尝试使用智能手机从Facebook访问应用程序,Facebook的重定向到一个OAuth URL在几毫秒内,然后将其重定向到:

https://example.herokuapp.com/?state=63903485c518f2ae5deca667b9a............#_=_ 

由于/mobile.php丢失,桌面的版本是加载。

我该如何解决这个问题?任何建议非常感谢。

非常感谢您

编辑:一张安全代码

try { 
    $facebook = new Facebook(array(
      'appId' => AppInfo::appID(), 
      'secret' => AppInfo::appSecret(), 
    )); 
    $access_token=$_GET['access_token']; 
    Log::debug("BaseControl:access token: ". $access_token); 
    if(isset($access_token)){ 
     $facebook->setAccessToken($access_token); 
    } 
    $user_id = $facebook->getUser(); 
} catch (Exception $e) { 
    exit("Error getting facebook data"); 
} 

if ($user_id) { 
    try { 
     $basic = $facebook->api('/me');//se necesita access token, si no se tiene falla 
    } catch (FacebookApiException $e) { 
     if (!$facebook->getUser()) { 
      exit("Invalid access token"); 
     } 
    } 
    if($basic==null){ 
     exit("Application not installed"); 
    } 
    $user=UsersLogic::getUser($user_id); 
    if($user==null){ 
     exit("User not registered in database"); 
    } 

} 
else{ 
    exit("No user logged"); 
} 
+0

的Facebook SDK您使用的是哪一种? –

+0

JS API,因为我们稍后正在进行JSON调用。如果有帮助,只需使用主要安全代码进行编辑。 – Arturo

回答

5

Arturo,我会仔细检查您的仪表板设置是否正确。确保“有Facebook登录的网站”部分有正确的URL,在你的情况下,它是移动的。当您将鼠标悬停在[?]上时,工具提示会显示“您网站的网址。出于安全原因,我们只会重定向到此网址”。因此,为了获得正确的重定向URL,您需要确保该字段中的URL是您希望用户重定向到的URL。

正如它所说的,出于安全目的,Facebook只会重定向到该URL,因此如果您的应用程序具有桌面和移动版本,那么您需要有一个端点来处理重定向以将用户发送到正确的页。对于你的情况,似乎重定向url是你的根页面。你应该做的是在你的根页面有一些逻辑来检查用户代理的传入请求和适当的路由。我会检查http://detectmobilebrowsers.com/的开源代码片段来检测移动浏览器。您应该在第一个字段中放置根网页网址,在第二个字段中放置移动版。

让我知道是否有帮助。

+0

谢谢Jesse。我没有任何关于“使用Facebook登录的网站”的内容,因为我认为“Canvas URL”会重定向到我的桌面,“移动网站URL”会移动到我的移动设备上,而不会自己开发根网页中的逻辑。我错了吗? – Arturo

+2

是的,这是一个不正确的假设。画布网址适用于在Facebook上托管的应用。您必须使用Facebook登录字段的网站,而不是画布网址 –

+0

这很有道理。那么,如果你没有被FB授权,那么'registration-url'的重点是那个网址的重点是什么?您是否被重定向到此URL,然后一旦您授予应用程序权限,它就会重定向到Facebook应用程序控制台中指定的“网站URL”? – tdk2fe

3

虽然这并没有解决问题的心脏,我有一个想法,你可以,如果你不尝试没有得到任何回应:

在您的应用程序的桌面版本的索引页上,您可以检查用户代理以测试它是否为移动设备。如果是的话,你可以重定向到你的mobile.php页面。

0

用户代理嗅探是总是一个坏主意。在应用程序的入口处,如果用户通过Facebook内的页面选项卡(即桌面用户)加载应用程序,则应通过检查Facebook发送的“签名请求”变量来确定它是桌面还是移动设备。如果用户在Facebook之外的移动设备上访问该应用程序,则该变量将不会被发送。

PHP:

if(isset($_REQUEST['signed_request'])) 
    //load desktop version 
else 
    //load mobile version 
相关问题