2011-05-24 91 views
1

作为标题状态,我有一些麻烦让用户登录我的Facebook应用程序。Facebook登录无论是PHP或Javascript SDK不工作

当用户注销时,他们点击log in,页面重新加载,然后显示一个Facebook徽标,其下方有文字Go to Facebook.com,当我尝试使用Javascript SDK时,我确实在弹出的登录页面框,但是一旦我按Login,弹出窗口将重定向到XD Proxy页面,在那里我卡住了,我必须手动关闭弹出窗口才能执行回调。

在这两种情况下,我在Chrome控制台收到此错误,

错误使用JavaScript SDK,当我在控制台中,得到:

不安全的JavaScript尝试与URL https://www.facebook.com/dialog/permissions.request?etcetc访问框架。 .. 从与网址 http://subdomain.mysite.com/folder/?etcetc ... 域,协议和端口必须 匹配。

错误我在控制台中看到,使用PHP SDK时:

不安全JavaScript尝试与URL http://apps.facebook.com/my_app/从 帧帧访问使用URL https://www.facebook.com/login.php?etcetc ... 域,协议和端口必须匹配 。

这里是我的代码,

PHP:

<?php 
require 'libs/facebook/src/facebook.php'; 

$facebook = new Facebook(array(
    'appId' => 'APP ID', 
    'secret' => 'SECRET', 
)); 

$user = $facebook->getUser(); 

if ($user) { 
    try { 
    $user_profile = $facebook->api('/me'); 
    } catch (FacebookApiException $e) { 
    error_log($e); 
    $user = null; 
    } 
} 

if ($user) { 
    $logoutUrl = $facebook->getLogoutUrl(); 
    echo "<a href='".$logoutUrl."'>Login</a>"; 
} else { 
    $loginUrl = $facebook->getLoginUrl(); 
    echo "<a href='".$loginUrl."'>Login</a>"; 
} 
?> 

我使用PHP SDK 3.0版本。

PHP的失败之后,我尝试使用的JavaScript SDK代替,以处理登录和注销,

的Javascript:

FB.init({ 
    appId  : 'APP ID', 
    status  : true, // check login status 
    cookie  : true, // enable cookies to allow the server to access the session 
    xfbml  : true // parse XFBML 
}); 

FB.getLoginStatus(function(response) { 

    if (response.session) { 

     $('#login').hide(); 
     $('#logout').show(); 

    } else { 

     $('#logout').hide(); 
     $('#login').show(); 

    } 
}); 


$("#logout").live('click', function(){ 
    FB.logout(function(response) { 
     window.location.reload(); 
    }); 
}); 

$("#login").live('click', function(){ 
    FB.login(function(response) { 
     window.location.reload(); 
    }); 
}); 

任何帮助将不胜感激,谢谢!

+1

其Chrome安全措施来阻止跨域请求等http:// stackoverflow。com/questions/3010170/unsafe-javascript-attempt-to-access-frame-with-url-error-being- – 2011-05-24 12:20:50

+0

php代码看起来不错。定义'失败'请 – zerkms 2011-05-24 12:26:09

+3

这就是为什么我讨厌friggin的Facebook平台。 – 2011-05-24 12:28:45

回答

1

好的,所以在将我的头撞向董事会一段时间之后,我想出了这个办法,它的确有诀窍!

使用PHP SDK,它将用户重定向到登录页面(如果他们没有登录),并将Logout URL设置为next参数,以便以后随时随地使用。

而没有更多的XSS错误! :)

if ($user) { 
    $logoutUrl = $facebook->getLogoutUrl(array('next'=>'http://apps.facebook.com/your_app/')); 
} else { 
    $loginUrl = $facebook->getLoginUrl(array('redirect_uri'=>'http://apps.facebook.com/your_app/')); 
    echo "<script>top.window.location='".$loginUrl."';</script>"; 
} 

我希望这有助于!