没有重定向的Facebook身份验证?

时间:2011-07-21 05:20:10

标签: facebook redirect login

有没有办法在不重定向的情况下使用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。

谢谢!

2 个答案:

答案 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);
}