有没有办法在不重定向的情况下使用facebook身份验证(OAuth 2.0)?
我没有使用facebook登录按钮,所以我应该重定向到https://www.facebook.com/dialog/oauth? client_id = YOUR_APP_ID& redirect_uri = YOUR_URL,但我不想将我的用户重定向到我的页面之外。有没有办法在弹出窗口中打开这个URL(我怎么做btw?),然后捕获sessionChange事件,就像使用正常的facebook登录按钮一样? 我正在使用jQuery和Pyramid。
谢谢!
答案 0 :(得分:2)
几周前我使用Facebook JS SDK
为这个行为做了一个客户端的应用程序FB.login(function(response){
if(response.session){
var user_id = response.session.uid,
access_token = response.session.access_token;
}
}
);
如果需要,您可以使用ajax将access_token发送到您的服务器。如果你使用了太多的ajax,请小心,如果你不经常调用FB.getLoginStatus(),会话将会过期。
答案 1 :(得分:2)
您可以检查用户是否具有有效的访问令牌,换句话说,是否已在某个时间点登录到您的站点。 FB会在前端为您提供会话数据,所以请按照以下方式进行:
FB.getLoginStatus(function(response){
//send the response to the back end in a json string
});
然后使用旧版签名验证的修改版本在后端验证它。接缝工作。如果我遗失了什么,请告诉我。 它只告诉您用户ID,访问令牌匹配您的站点。不需要卷曲调用。 它不会告诉您会话是否实际上当前有效,但不要依赖它来为您的银行系统或任何东西。
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);
}