【发布时间】:2014-11-25 19:46:16
【问题描述】:
设置纯服务器流facebook SSO的基本步骤是什么,文档和往常一样有点模棱两可?
我使用 javascript 弹出窗口设置了流程,但后来才意识到您不允许自定义登录按钮。当您将它们粘贴到下一个 google 和 twitter sso 时,登录框看起来很糟糕。
http://www.codecademy.com/ 似乎指向他们自己的服务器,然后转发到这样的 URL:
https://www.facebook.com/dialog/oauth?response_type=code
&client_id=212500508799908&
redirect_uri=http%3A%2F%2Fwww.codecademy.com%2Fauth%2Ffacebook%2Fcallback&state=8aac5bc63c5afe8fbabe572021e7750579fefd898d7b4316&
scope=email%2Cpublish_actions
这个 URL 是如何生成的?在 facebook 文档中,有一个函数“getLoginUrl”.. 是否会调用它来生成正确的 URL?
我尝试将用户直接从浏览器引导至:
var href = 'https://www.facebook.com/dialog/oauth?' +
'client_id='+app_id+'&'+
'redirect_uri=http://www.mysite.net/authenticate_facebook.php&'+
'scope=email&';+
'state='+$('body').attr('unique');
但是在 facebook php 然后下面的接收代码导致了关于“状态”不匹配的错误......我假设 state 不仅仅是我的服务器生成的随机值,必须从facebook 服务器?
require_once(WEBROOT_PRIVATE.'authenticate/facebook-php-sdk/src/facebook.php');
$config = array(
'appId' => 'xxx',
'secret' => 'xxx',
'fileUpload' => false,
'allowSignedRequest' => false
);
$facebook = new \Facebook($config);
$user_id = $facebook->getUser();
if($user_id)
{
try
{
$user_profile = $facebook->api('/me','GET');
}
catch(FacebookApiException $e)
{
error_log($e->getType(), 0);
error_log($e->getMessage(), 0);
}
}
所以,这是正确的流程吗:
1 - 将用户定向到我的服务器 facebook_auth.php
2 - facebook_auth.php 生成获取 url 并将用户转发到它
3 - 如果需要,用户可以登录 facebook,允许我的应用程序
4 - 我的 facebook_auth.php 脚本然后检查令牌并使用 facebook 与服务器对话以验证其余部分
5 - 然后我的网站让用户登录
【问题讨论】:
-
此错误的一个原因是 - 如果用户已经登录并且您正在再次调用 getLoginUrl() 方法。所以请确保你没有这样做,代码遵循不这样做的逻辑。
-
我已经添加到我的问题中......流程是否正确逻辑?
-
嗯,所以你确定一旦用户通过 FB 登录验证,getLoginUrl() 就不会再次调用。
-
是的,对我来说,缺少的一块拼图是从 facebook 函数 getLoginUrl() 创建状态。相反,我正在创建自己的状态。它现在可以工作了。
-
感谢您的提示!我不明白 facebook 和 google 的文档怎么会如此混乱.. 我正在转向 twitter sso.. 手指交叉这更直接
标签: php facebook facebook-graph-api