设置纯服务器流程facebook SSO的基本步骤是什么,文档通常有点含糊不清?
我用javascript弹出窗口设置流程只是为了以后意识到你不能自定义登录按钮..当你坚持下一个google和twitter sso时,登录框看起来很糟糕。
http://www.codecademy.com/似乎指向自己的服务器,然后转发到这样的网址:
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
如何生成此网址?在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生成获取网址并将用户转发到其上
3 - 如果需要登录Facebook,用户可以使用我的应用
4 - 我的facebook_auth.php脚本然后检查令牌并使用facebook与服务器对话以验证其余的
5 - 我的网站随后将用户登录到
答案 0 :(得分:0)
上周我遇到了类似的问题,并通过多次调用getLoginUrl()来覆盖状态字段。每次调用getLoginUrl()时,都会在SDK中生成一个新的状态标记并存储在$ _SESSION中(它只是一个随机值),所以如果你调用它两次并且用户使用第一个链接来记录在,第二个调用将重置SDK的内部状态令牌,您将在日志中收到此错误。
SDK会在Facebook授权用户并将其重定向回您的网站后在URL中查找相同的状态令牌,如果它不匹配,则会记录此错误(此处为“链接”)来源)。