没有重定向的Facebook身份验证?
有没有一种不用重定向就能使用facebook身份验证(OAuth2.0)的方法 我没有使用facebook登录按钮,所以我应该重定向到? client\u id=你的应用程序\u id&redirect\u uri=你的URL,但我不想将我的用户重定向到我的页面之外。有没有办法在弹出窗口中打开此url(顺便说一句,我该怎么做?),然后像使用普通的facebook登录按钮一样捕获sessionChange事件?没有重定向的Facebook身份验证?,facebook,redirect,login,Facebook,Redirect,Login,有没有一种不用重定向就能使用facebook身份验证(OAuth2.0)的方法 我没有使用facebook登录按钮,所以我应该重定向到? client\u id=你的应用程序\u id&redirect\u uri=你的URL,但我不想将我的用户重定向到我的页面之外。有没有办法在弹出窗口中打开此url(顺便说一句,我该怎么做?),然后像使用普通的facebook登录按钮一样捕获sessionChange事件? 我正在使用jQuery和Pyramid 谢谢 几周前,我使用Facebook JS S
我正在使用jQuery和Pyramid
谢谢 几周前,我使用Facebook JS SDK为一个客户机开发了一个应用程序
FB.login(function(response){
if(response.session){
var user_id = response.session.uid,
access_token = response.session.access_token;
}
}
);
如果需要,可以使用ajax将访问令牌发送到服务器。如果您使用太多ajax,请小心,如果您不经常调用FB.getLoginStatus(),会话将过期。您可以检查用户是否拥有有效的访问令牌,换句话说,在某个时候登录到您的站点。FB在前端为您提供会话数据,因此如下所示:
FB.getLoginStatus(function(response){
//send the response to the back end in a json string
});
然后在后端使用旧签名验证的修改版本对其进行验证。这是工作。如果我遗漏了什么,请告诉我。
它只告诉您用户id、访问令牌与您的站点匹配。不需要curl调用。
它不会告诉您会话当前是否有效,但不要将其用于您的银行系统或任何事情
function validateFB_sessionObj($sessionObj){//pass me the session data object
$sessionObj = $sessionObj->session;
global $fb;//pull in the secret fb keys
if (!is_object($sessionObj) || !isset($sessionObj->uid) || !isset($sessionObj->access_token) || !isset($sessionObj->sig)){
// warning("facebook session object is lacking something", $sessionObj);
return false;
}
$expectedSig = generateSig($sessionObj, $secret);
if ($sessionObj->sig = $expectedSig){
// status("fb signature looks good");
return true;
} else {
// warning("facebook signature looks wrong", $sessionObj);
return false;
}
}
function generateSig($params, $secret){
$string = $params->access_token . $params->uid . $secret;
return md5($string);
}
它是通过一个弹出窗口完成的。这意味着您只能通过用户操作(如单击事件)调用它,否则浏览器可能会阻止它。谢谢!我有一个使用facebook auth的金字塔应用程序。我知道有两种类型的facebook用户身份验证-客户端和服务器端。我目前只使用客户端,因为只访问js中的用户数据对我来说是可以的。我在考虑安全问题,但我不确定这是否很重要。我的网站包含由登录用户提交的表单。由于我无法在服务器端检查登录状态,任何人都可以在技术上提交表单,即使没有登录,只需简单地操作js,对吗?服务器端身份验证是唯一的方法吗?@Raiders服务器端检查也会更安全。我不确定在Pyramid中如何实现这一点,但基本上我在
FB.login()
之后使用ajax,并将用户id和访问令牌发送到服务器。然后我在服务器端使用cURL向https://graph.facebook.com/me?access_token=“从\u ajax访问\u令牌\u”
并验证返回的用户\u id与我从ajax获得的用户\u id匹配。