使用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,这样它就不会被自动删除。
对不起,我希望我有点帮助:)
这是非常有用的,非常感谢你。 –
对于任何人在将来阅读:在我的问题的第二部分有更多的信息来实现这一点。 –