facebook认证/登录问题

Posted

技术标签:

【中文标题】facebook认证/登录问题【英文标题】:facebook authentication / login trouble 【发布时间】:2010-05-13 10:17:58 【问题描述】:

我已经使用 php 设置了 facebook 身份验证,它是这样的 首先在这里获得授权:

https://graph.facebook.com/oauth/authorize?client_id=<?= $facebook_app_id ?>&redirect_uri=http://www.example.com/facebook/oauth/&scope=user_about_me,publish_stream

然后在这里获取访问令牌:

$url = "https://graph.facebook.com/oauth/access_token?client_id=".$facebook_app_id."&redirect_uri=http://www.example.com/facebook/oauth/&client_secret=".$facebook_secret."&code=".$code;"

function get_string_between($string, $start, $end) 
    $string = " ".$string; 
    $ini = strpos($string,$start); 
    if ($ini == 0) return ""; 
    $ini += strlen($start); 
    $len = strpos($string,$end,$ini) - $ini; 
    return substr($string,$ini,$len); 
 


$access_token = get_string_between(file_get_contents($url), "access_token=", "&expires=");     

然后获取用户信息:

$facebook_user = file_get_contents('https://graph.facebook.com/me?access_token='.$access_token);

$facebook_id = json_decode($facebook_user)->id;
$first_name = json_decode($facebook_user)->first_name;
$last_name = json_decode($facebook_user)->last_name;

这很丑陋(在我看来),但它可以工作....但是....用户仍然没有登录...因为我没有创建或检索任何会话变量来确认用户已登录 facebook...

这意味着在完成身份验证后,用户仍然需要登录 ....

首先:有没有更好的方法使用 php 来做我上面所做的事情? 第二:我如何设置/获取会话变量/cookie,以确保用户不必点击登录

感谢您的帮助

【问题讨论】:

【参考方案1】:

那么回答你的第一个问题“有没有更好的方法使用 php 来做我上面所做的事情?”

基本上我认为这是一个见仁见智的问题,因为有太多的选择。这是你觉得舒服的东西,也是你申请的目的。

就个人而言,(我这样说不是为了给你压力,而是为了提供一个选项)我使用 javascript 登录,它来自 facebook,它是一个精美的手工艺脚本,干净、快速等,可以在 here 找到(它位于在这个阶段,如果我的信息已过时,我深表歉意,因为我刚刚注意到 Facebook 已经更新了该页面,哈哈!)好的部分是它将身份验证令牌保存为变量(如果你可以将其更改为会话希望),这实际上是在您将其粘贴到您所展示的大多数网址的末尾时完成的。

(尽管浏览新更新的网站,代码的布局看起来更“复杂”,所以不要害怕寻求帮助,我会给你原始代码)

问题 2:如何获取/设置会话变量... 好吧,有很多事情和方法等等......但是我将保留基本/简单版本并添加注释,您应该在脑海中归档以获得更高级的选项。 首先,在任何包含会话变量的页面的开头,您应该从

session_start();

然后当你想添加一个会话变量时,这很简单

$_SESSION['session_variable_name'] = $variable;

(是的,我知道你应该做整个 foo 和 bar 的事情,但它们让我很生气 :D)。 就是这样!如果你想“退出”,你可以

session_destroy();

它会停止携带会话详细信息。 现在会议记录:

除非另有说明,否则会话通常作为文件保存在您的服务器上!这可能会违反您所做的任何隐私声明!

会话通常无法跨子域 (www.website.com -> website.com) 存在,因此不建议对数据进行 $_POST。此外,有些人在会话数据从 http:// 到 https:// 时遇到问题。

会话不会永远持续下去,它们实际上将会话 ID 留在客户端浏览器上的 cookie 中以供日后参考。

当您有多个服务器用于流量权重分配时,您可能会再次丢失会话,因为它没有跨服务器传递。您可以将它们保存在所有服务器都可以访问的位置,或者拥有一个满足 memcache 之类的会话的服务器。

我认为这是你需要了解的关于会话的最多信息:P

希望对你有所帮助!

乔恩

【讨论】:

以上是关于facebook认证/登录问题的主要内容,如果未能解决你的问题,请参考以下文章

Facebook 用户认证 iOS

如何使用 gloox 登录 Facebook 聊天

如何在nodejs中使用facebook登录

Facebook 登录问题

点击 Facebook 登录按钮后 Facebook 登录对话框消失

Parse - 通过 Facebook 应用程序登录 Facebook