Используя PHP или JavaScript Facebook SDK, как я могу заставить пользователя войти на мой сайт?

Я использую PHP SDK для PHP, чтобы регистрировать пользователей на моем сайте, например:

<?php $facebook = new Facebook(array( "appId" => "myAppID", "secret" => "mySecret", )); $user = $facebook->getUser(); if ($user) { try { // user is authenticated $user_profile = $facebook->api("/me"); } catch (FacebookApiException $ex) { $user = null; } } if ($user) { $logoutURL = $facebook->getLogoutUrl(); ?> <img src="https://graph.facebook.com/<?php echo $user; ?>/picture" /> <a href="<?php echo($logoutURL); ?>">Logout</a> <pre><?php print_r($user_profile); ?></pre> <?php } else { ?> <a href="<?php echo($loginURL); ?>">Login</a> <?php } ?> 

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

Возможно ли, чтобы пользователи остались в системе?


Обновить:

Мое точное решение оказалось комбинацией JavaScript и PHP Facebook SDK.

Проблема в том, что cookie не используется для хранения информации для входа в Facebook – сеанс PHP (cookie сеанса PHP истекает, когда браузер закрыт). В дополнение к этому, если у вас нет автономного доступа, токены доступа истекают. Другими словами, даже если вы должны хранить токен доступа Facebook в файле cookie, он в конечном итоге истекает, и пользователь будет выведен из системы.

JavaScript я закончил с использованием:

  FB.init({ appId: "myAppID", cookie: true, // enable cookies to allow the server to access the session xfbml: true, // parse XFBML oauth: true // enable OAuth 2.0 }); FB.Event.subscribe("auth.login", function(response) { // a user logged in who was not previously logged in window.location.refresh(true); // ideally modify the page with JS rather than refreshing }); FB.Event.subscribe("auth.logout", function(response) { // a user logged out who was previously logged in window.location.refresh(true); // ideally modify the page with JS rather than refreshing }); // check if the user is logged in or not, using the Facebook JS SDK FB.getLoginStatus(null); 

Когда страница загружена, SDK Facebook JavaScript проверяет с помощью Facebook, чтобы узнать, зарегистрирован ли пользователь. Если пользователь вошел в систему и cookie еще не установлен, он будет установлен. Затем вы можете обновить страницу (или, в идеале, изменить ее с помощью JavaScript), и сервер сможет получить доступ к файлу cookie с использованием обычного PHP SDK (и первого фрагмента кода в этом вопросе).

Это лучший способ найти постоянные логины в сеансах просмотра.

Solutions Collecting From Web of "Используя PHP или JavaScript Facebook SDK, как я могу заставить пользователя войти на мой сайт?"

Здесь есть два сценария. Один из них – аутентификация пользователя, а другой – распознавание пользователя.

Что обычно происходит, когда вы используете методы входа в систему из любого API Facebook, так это то, что они увидят, будет ли у пользователя сеанс работы с Facebook. Если пользователю не будет предложено войти в систему, чтобы вы могли видеть, какой пользователь он есть. В вашем случае вы хотите, чтобы пользователь всегда регистрировался в Facebook. Это не реально выполнимо, так как вам нужно выяснить, какой именно пользователь. Вы можете сохранить файл cookie на компьютере пользователя с некоторыми подробностями узнавания. Вам нужно будет иметь автономные разрешения для пользователя, иначе пользователь должен будет войти в систему с API, чтобы получить новый access_token.

Если вы хотите, чтобы мой совет, вы должны просто использовать метод GetLoginStatus API, чтобы проверить, имеет ли пользователь сеанс работы с Facebook. Если пользователь не зарегистрировался в Facebook, это не слишком много, чтобы потребовать, чтобы они вошли на ваш сайт. Большинство пользователей, использующих Facebook, имеют свой логин, поэтому они всегда будут иметь сессию, когда их браузер открыт.

Это было бы / это лучший способ сделать это, так как это не требует, чтобы вы попросили пользователей использовать автономные разрешения, которые, я полагаю, многие пользователи не захотят давать. Если по какой-то причине вы не можете использовать этот подход, я предлагаю получить автономное разрешение, а затем сохранить файл cookie на своем компьютере без таймера, чтобы он не удалялся автоматически.

Извините за стену текста, но я надеюсь, что я был несколько полезен 🙂