使用PHP或JavaScript Facebook SDK,我如何让用户登录到我的网站?

问题描述:

我使用Facebook's PHP SDK登录用户到我的网站,像这样:使用PHP或JavaScript Facebook SDK,我如何让用户登录到我的网站?


<?php 
$facebook = new Facebook(array(
    "appId" => "myAppID", 
    "secret" => "mySecret", 
)); 

$user = $facebook->getUser(); 

if ($user) { 
    try { 
     // user is authenticated 
     $user_profile = $facebook->api("/me"); 
    } catch (FacebookApiException $ex) { 
     $user = null; 
    } 
} 

if ($user) { 
    $logoutURL = $facebook->getLogoutUrl(); 
    ?> 
    <img src="https://graph.facebook.com/<?php echo $user; ?>/picture" /> 
    <a href="<?php echo($logoutURL); ?>">Logout</a> 
    <pre><?php print_r($user_profile); ?></pre> 
    <?php 
} else { 
    ?> 
    <a href="<?php echo($loginURL); ?>">Login</a> 
    <?php 
} 
?> 

的问题是,当用户返回到现场,他们不再登录,并且需要重新登录英寸

返回用户是否可以保持登录状态?


更新:

我的精确解最终被JavaScript和PHP Facebook的软件开发工具包的组合。

问题是cookie不用于存储Facebook登录信息 - PHP会话是(PHP会话cookie在浏览器关闭时会过期)。除此之外,除非您有离线访问权限,否则访问令牌将过期。换句话说,即使您将Facebook访问令牌存储在cookie中,它最终也会过期并且用户将被注销。

中的JavaScript我最终使用:

FB.init({ 
     appId: "myAppID", 
     cookie: true, // enable cookies to allow the server to access the session 
     xfbml: true, // parse XFBML 
     oauth: true // enable OAuth 2.0 
    }); 

    FB.Event.subscribe("auth.login", function(response) { 
     // a user logged in who was not previously logged in 
     window.location.refresh(true); // ideally modify the page with JS rather than refreshing 
    }); 

    FB.Event.subscribe("auth.logout", function(response) { 
     // a user logged out who was previously logged in 
     window.location.refresh(true); // ideally modify the page with JS rather than refreshing 
    }); 

    // check if the user is logged in or not, using the Facebook JS SDK 
    FB.getLoginStatus(null); 

当加载页面时,看到了Facebook的JavaScript SDK检查与Facebook用户是否登录如果用户登录,和饼干尚未设置,它将被设置。然后,您可以刷新页面(或者,理想情况下,使用JavaScript修改它),服务器将能够使用常规PHP SDK(以及此问题中的第一段代码)访问cookie。

这是我在跨浏览会话进行永久登录时找到的最佳方式。

这里有两种情况。一个是验证用户,另一个是识别用户。

当您使用任何Facebook API提供的登录方法时,通常会发生什么,他们会看到用户是否有与Facebook会话。如果没有,用户将被提示登录,以便您可以看到它是哪个用户。在你的情况下,你希望用户总是登录到Facebook。这是不可行的,因为你需要找出它是哪个用户。您可以在用户计算机上存储一些识别细节的cookie。您需要拥有该用户的离线权限,否则用户将不得不使用API​​登录以获取新的access_token。

如果你想要我的建议,你应该只使用API​​的GetLoginStatus方法来检查用户是否有与Facebook会话。如果用户未登录Facebook,则要求他们登录您的网站并不算太多。大多数使用Facebook的用户都存储了他们的登录信息,以便他们在浏览器打开时总是会进行会话。

这将是最好的方法去做,因为它不需要你问用户离线权限,我想很多用户不会给。如果由于某种原因,你不能使用这种方法,我建议获得脱机许可,然后在其计算机上存储一个没有定时器的cookie,这样它就不会被自动删除。

对不起,我希望我有点帮助:)

+0

这是非常有用的,非常感谢你。 –

+0

对于任何人在将来阅读:在我的问题的第二部分有更多的信息来实现这一点。 –