Могу ли я использовать Facebook SDK для автоматического входа (используя cron) и сохранения токена доступа? - PullRequest
0 голосов
/ 07 февраля 2012

Я хочу хранить токен полного доступа на моем сайте. Можно ли использовать API Facebook и входить в систему crontab каждый час? Если я могу, можете ли вы указать мне документацию, в которой говорится об этом?

require '../src/facebook.php';
$facebook = new Facebook(array(
  'appId'  => '13XXXXXXXXXX',
  'secret' => 'fbXXXXXXXXXXXXXXXXXXXXXXXXX',
));
$user = $facebook->getUser();
if ($user) {
  $logoutUrl = $facebook->getLogoutUrl();
  $access_token = $facebook->getAccessToken();
} else {
  $loginUrl = $facebook->getLoginUrl();
}
echo $access_token;

UPDATE

Моя цель - предоставить окно поиска для всех, чтобы каждый мог искать в Facebook, не требуя входа в систему.

Я пытался

https://graph.facebook.com/search?q=mark&type=user&access_token=1xxxxxxxxxxxxxx‌​|xxxxxxxxxxxxxxx&scope=publish_stream,offline_access,user_status,read_stream

Но возвращается ошибка "message": "A user access token is required to request this resource."

И я вижу, что кто-то разработал сайт, который выполняет поиск в Facebook по адресу http://www.fbsearch.us/q/mark/5

Как это работает?

Ответы [ 5 ]

1 голос
/ 16 февраля 2012
<code><?php
if(sizeof($_GET['q']) > 0)
{ 
    $app_id = "YOUR_APP_ID";
    $app_secret = "YOUR_APP_SECRET";
    require_once('facebook_app/facebook.php'); 
    $facebook = new Facebook(array(
      'appId'  => $app_id ,
      'secret' => $app_secret,
    ));
    $fb_access_token = $facebook->getAccessToken();
    $ch = curl_init("https://graph.facebook.com/search?q='{$_GET['q']}'&type=user&access_token=$fb_access_token");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_NOSIGNAL, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT_MS, 80000);
    $data = curl_exec($ch);
    $curl_errno = curl_errno($ch);
    $curl_error = curl_error($ch);
    curl_close($ch);

    if ($curl_errno > 0) {
            echo "cURL Error ($curl_errno): $curl_error\n";
    } else {
    $decoded = json_decode($data);
    echo '<pre>';
    print_r($decoded->data);
    echo '
';}} else {?>
1 голос
/ 15 февраля 2012

Как ответ на вашу третью редакцию ...

Я выполнил сохранение состояния пользователя с помощью

а) сохранение последнего URL в контексте сеанса пользователя

b) перенаправить форму успешного входа в систему на серверный скрипт, который сохранит учетные данные в том же контексте сеанса, а затем перенаправит браузер на последний URL или страницу приветствия по умолчанию.

URL-адрес перенаправления присоединен к диалоговому окну входа в систему oauth:

$params = array(
  'scope' => 'read_stream, friends_likes',
  'redirect_uri' => 'https://www.myapp.com/post_login_page'
);

$loginUrl = $facebook->getLoginUrl($params);

После того как пользователь авторизует ваше приложение, FB перенаправляет его обратно на redirect_uri с токеном доступа во фрагменте URI:

https://www.myapp.com/post_login_page?access_token=...

выдержки из facebook-getLoginUrl и Аутентификация

Возможно, вам придется добавить YOUR_URL с идентификатором сеанса, если он не переводится напрямую (вероятно, из-за пересечения http / https / http).

Таким образом, пользователь видит наименьший переход от имени входа в Facebook с авторизованной страницы приложения и может игнорировать действительные учетные данные.

Будьте осторожны, такие методы могут быть скомпрометированы XSS и другими 10 самых уязвимых мест OWASP

0 голосов
/ 12 февраля 2012

Требуется токен доступа пользователя для запроса этого ресурса

В настоящее время вы отправляете токен доступа к приложению (APP_ID|SECRET_TOKEN), которого недостаточно.Чтобы убедиться, что вы можете искать, вы должны получить пользовательский токен доступа (например, ваш) и выполнить поиск по нему.

Итак, что вам нужно:

здесь вы получите токен доступа.Этот токен доступа будет использоваться для всех действий, таких как выполнение crontab.

Будьте осторожны

Делайте это только в том случае, если вы уверены, что не нарушаете политику конфиденциальности Facebook!Это нормально, например, публиковать на своей стене этот метод из crontab, но нельзя разрешать людям искать других, так как они могут быть заблокированы!

0 голосов
/ 15 февраля 2012

ОК, я не уверен, почему многие люди никогда не читают полный вопрос обо мне, и почему мой вопрос был отредактирован другим пользователем?

Сначала я задаю этот вопрос, потому что я вижу fbsearch.us, затемпосле Atul Agrawal, Lix и более пользователь напоминает мне, что это нарушение политики платформы Facebook. Извините, это моя вина

Поэтому я обновляю свой вопрос, Я буду подчиняться политике. И обновляю свой вопрос, но я нехочу длинный URL, например state=85202ba5222f95ba7fee0c78ff1971dc&code=AQBGsJjT92gALrAjTCI0XQIXht......,

Я никогда не найду путь под PHP SDK, но каким-то образом в JS SDK

<script src="https://connect.facebook.net/en_US/all.js"></script>
<script type="text/javascript">     
    window.fbAsyncInit = function () {
        FB.init({ appId: '140174749371026',
            status: true,
            cookie: true,
            xfbml: true,
            oauth: true
        });
        function FBLogin() {
            FB.login(function (response) {
                if (response.authResponse) {                            
                    ConnectFacebookUser(response.authResponse.accessToken);
                } else {
                }
            }, { scope: 'email' });
        }
        $('#fb-button').live('click', function (e) {
            FBLogin();

            e.preventDefault();
        });
        function ConnectFacebookUser(accesstoken) {
            alert(accesstoken)
        }
    };
</script>


<a href="#" id="fb-button">Login with facebook</a>
<div id="fb-root"></div>

У любого есть метод под PHP SDK?Я надеюсь, что теперь люди могут перестать говорить о policy и обсудить web technology.Благодарю.

0 голосов
/ 10 февраля 2012

Невозможно смоделировать учетную запись Facebook для входа в систему с помощью crontab.Пропуск шага подтверждения невозможен, потому что пропуск любого шага не сгенерирует access_token.Единственный выход - использовать разрешение offline_access и сгенерировать access_token.Все запросы, выполненные на Facebook, могут быть выполнены с помощью access_token.

Возможный выход;Вы предоставляете разрешение offine_access для своего приложения и сохраняете пользовательский access_token где-то в приложении.Может быть, жесткий код это.Убедитесь, что вы не раскрываете это публично.Этот access_token жестко запрограммирован где-то в файлах на стороне вашего сервера, а не в файлах HTML или js.

Отправьте форму со всеми необходимыми параметрами;Например: q = метка и тип = пользователь.С вашего сервера отправьте запрос curl на graph.facebook.com с параметрами и access_token.Вы получите ответ в формате JSON, который сможете вернуть обратно в представление HTML.Вы также можете использовать AJAX, чтобы сделать его бесшовным.В любом из случаев;HTTP-запрос или XHR-запрос access_token никогда не раскрывается пользователю.

Вы можете сделать приложение немного умным, используя access_token пользователей, которые вошли в свою учетную запись Facebook, и ваш access_token для пользователей, которые не имеютАккаунты на Facebook.

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