Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
没有重定向的Facebook身份验证?_Facebook_Redirect_Login - Fatal编程技术网

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

没有重定向的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

有没有一种不用重定向就能使用facebook身份验证(OAuth2.0)的方法

我没有使用facebook登录按钮,所以我应该重定向到? client\u id=你的应用程序\u id&redirect\u uri=你的URL,但我不想将我的用户重定向到我的页面之外。有没有办法在弹出窗口中打开此url(顺便说一句,我该怎么做?),然后像使用普通的facebook登录按钮一样捕获sessionChange事件?
我正在使用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匹配。