Аутентификация на Facebook без перенаправления? - PullRequest
3 голосов
/ 21 июля 2011

Есть ли способ использовать проверку подлинности Facebook (OAuth 2.0) без перенаправления?

Я не использую кнопку входа в Facebook, поэтому я должен перенаправить на https://www.facebook.com/dialog/oauth? client_id = YOUR_APP_ID & redirect_uri= YOUR_URL, но я не хочу перенаправлять моего пользователя за пределы моей страницы.Есть ли способ открыть этот URL во всплывающем окне (как мне это сделать, кстати?), А затем перехватить событие sessionChange, как при работе с обычной кнопкой входа в Facebook?
Я использую jQuery и Pyramid.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 27 октября 2011

Вы можете проверить, есть ли у пользователя действительный токен доступа, другими словами, был ли он зарегистрирован на вашем сайте в какой-то момент. FB предоставляет вам данные сеанса на внешнем интерфейсе, поэтому получите их так:

    FB.getLoginStatus(function(response){
        //send the response to the back end in a json string
    });

Затем проверьте его на серверной части, используя модифицированную версию проверки подписи прежних версий. Это швы на работу. Пожалуйста, дайте мне знать, если я что-то упустил. Это только говорит вам, что идентификатор пользователя, токен доступа совпадают для вашего сайта. Не требуется скручивание звонков. Он не говорит вам, действительно ли сеанс в настоящее время действителен, хотя не полагайтесь на него для вашей банковской системы или чего-либо еще.

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);
}
2 голосов
/ 21 июля 2011

Несколько недель назад я подал заявку на клиента с таким поведением, просто используя Facebook JS SDK

FB.login(function(response){
        if(response.session){
        var user_id = response.session.uid,
            access_token = response.session.access_token;
        }
    }
);

Вы можете отправить access_token на ваш сервер с помощью ajax, если хотите.Просто будьте осторожны, если вы используете слишком много AJAX, сеанс истечет, если вы не будете делать вызовы FB.getLoginStatus () так часто.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...