#authentication #login #oauth #facebook #legacy
#аутентификация #oauth #Facebook #наследие
Вопрос:
Я пытаюсь интегрировать свой существующий php-сайт с функциями входа в Facebook. В настоящее время у меня есть простое имя пользователя, пароль и адрес электронной почты для активации, и их данные хранятся в базе данных MYSQL. Я хочу добавить дополнительный доступ для входа в систему для пользователей Facebook. Я беспокоюсь о том, как я смогу интегрировать свой текущий доступ для входа в систему с новым доступом к facebook. Я считаю, что все мои страницы требуют, чтобы пользователи входили в систему, и я использую файлы cookie для хранения переменных сеанса, таких как nickname, которые я использую для создания контента на своих страницах.
Меня смущают многие подходы, которые я исследовал в Интернете, некоторые из них, к сожалению, устарели, а другие кажутся половинчатыми решениями. Эти три продолжают повторяться.
А) Login.php , Register.php и fbReg.php В login.php и register.php появляется при входе в систему с помощью fb login/register для создания сеанса и прохождения аутентификации в fbReg.php но это просто останавливается на пустом экране после перенаправления страницы.
(фрагмент из Register.php )
<script type="text/javascript">
FB.init({appId: '<?php echo $fb_app_id; ?>', status: true,
cookie: true, xfbml: true});
<?php
if ($errors == 0) {
?>
$('#form_hidden').hide();
<?php } else { ?>
checkInput('username');
checkInput('email');
checkInput('lastname');
checkInput('firstname');
checkInput('password');
checkInput('password2');
<?php } ?>
</script>
Б) Устаревшая аутентификация подключения
http://developers.facebook.com/docs/authentication/connect_auth/
Используя приведенную выше ссылку, я создал несколько тестовых сценариев, просто чтобы посмотреть, будет ли работать аутентификация. К счастью, на моем сайте у меня есть сторонние объявления или веб-фреймы, но я следовал инструкциям к письму, создавая interstititial_page и перенаправляя страницу с моей главной страницы входа. Однако я продолжаю получать нулевой сеанс.
(фрагмент страницы входа в php)
$api_key = "YOUR_API_KEY";
$interstitial_page = "YOUR_SECURE_URL"; //URL with no 3rd party apps
$url='http://www.facebook.com/login.php?api_key=' . $api_key
. 'amp;session_version=3amp;next=' . urlencode($interstitial_page)
. 'amp;v=1.0amp;return_session=1amp;fbconnect=1'
. 'amp;cancel_url=' . urlencode($interstitial_page);
echo "Welcome to the Old Auth flow";
echo "<p>";
echo("<a href='" . $url . "'>"
. "<img src='http://static.ak.facebook.com/images/"
. "devsite/facebook_login.gif'></a>");
C) Протокол OAuth 2.0
http://developers.facebook.com/docs/authentication/
когда я использую это снова, используя следующий скрипт:
https://www.facebook.com/dialog/oauth?
client_id=YOUR_APP_IDamp;redirect_uri=YOUR_URL
Я пытался и не смог использовать это для сбора информации о пользователях для моих новых пользователей сайта Facebook и сохранения ее в базе данных MySQL, а затем интегрировать этот аутентифицированный доступ к Facebook с «обычным» сеансом пользователя веб-доступа, поскольку это связано с переменными сеанса, которые используются в пользовательском интерфейсе.
Любая помощь будет оценена, я сейчас борюсь.
Спасибо, Майкл
я получаю пустой экран на fbReg.php
Ответ №1:
Я только что сделал это для своего сайта на прошлой неделе, поэтому я знаю, как сложно перебирать все многочисленные методы, многие из которых устарели. Это был мой подход:
-
Я разместил на своем сайте ссылку «Войти в систему с помощью Facebook», которая перенаправляет на мою обычную страницу регистрации.
<a href="http://www.facebook.com/dialog/oauth?client_id=<? echo $FACEBOOK_APP_ID ?>amp;redirect_uri=http://www.yoursite.com/register.phpamp;scope=email">Log in with Facebook</a>
-
Мой сценарий регистрации выглядит следующим образом:
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml"> <head></head> <body> <div id="fb-root"></div> <script src="http://connect.facebook.net/en_US/all.js"></script> <script> FB.init({appId: '<? echo $FACEBOOK_APP_ID ?>', status: true, cookie: true, xfbml: true}); FB.Event.subscribe('auth.login', function(response) { window.location.reload(); }); </script> function get_facebook_cookie($app_id, $app_secret) { $args = array(); parse_str(trim($_COOKIE['fbs_' . $app_id], '\"'), $args); ksort($args); $payload = ''; foreach ($args as $key => $value) { if ($key != 'sig') { $payload .= $key . '=' . $value; } } if (md5($payload . $app_secret) != $args['sig']) { return null; } return $args; } $cookie = get_facebook_cookie($FACEBOOK_APP_ID, $FACEBOOK_SECRET); if($cookie) { $access_token = $cookie['access_token']; } $url = 'https://graph.facebook.com/me?access_token='.$access_token; $graph = file_get_contents($url); if($graph) { $fbuser = json_decode($graph); $userid = $fbuser->id; $email = mysql_real_escape_string($fbuser->email); /********************** I placed code here to check if the email already exists in my database, which means they are already a member. In that case, I retrieve their username and password from the database and automatically log them in by rerouting them to my login script with their crenditials sent as well. ***********************/ /********************** If the email is not already in my database, then I know it's a new user and so I prompt them to make a username here. ***********************/ } //The user either opted to log in using my traditional non-Facebook method, or something went wrong with the FB authentication else { /********************** Show my normal registration form that prompts for username, email, etc ***********************/ }
-
В моем сценарии входа в систему я устанавливаю имя пользователя и т. Д. Файлы cookie Как обычно.
Надеюсь, это поможет!
Комментарии:
1. Это очень помогает. У вас действительно хорошее решение, у меня просто есть несколько вопросов. 1) когда у вас есть новый пользователь fb, который выбирает маршрут Facebook, после того, как вы предоставили им регистрацию на Facebook, и они прошли проверку подлинности, как вам подключить их к действительному сеансу? Это путем перенаправления их на предварительно заполненный сценарий входа с учетными данными? 2) Вы json_decode, чтобы получить $ userid и $email. Используете ли вы их для вставки в свою базу данных? Я хочу использовать имя, фамилию и имя пользователя fb в своем веб-приложении.
2. 1. Да, когда у меня появляется новый пользователь FB, после того, как он выбирает имя пользователя, мой код в основном входит в систему для них (по сути, устанавливает сеансовые файлы cookie), как если бы они сами нажали традиционную кнопку входа. Итак, в вашем сценарии регистрации, после того, как у вас будет вся необходимая информация для вашего нового пользователя FB, просто перенаправьте свой сценарий входа, передав его учетные данные. Я делаю это, используя скрытую форму, которую мой скрипт отправляет самостоятельно. 2. Да, как только у меня есть идентификатор пользователя и адрес электронной почты, а затем я прошу их выбрать имя пользователя, я вставляю их в свою базу данных как нового пользователя.
3. Не могли бы вы поделиться своими полными сценариями — регистрация и измененная страница входа. (очевидно, десенсибилизированный). Мой адрес электронной почты michael.mkpadi@michuksltd.com . Я очень благодарен. Спасибо
4. Я получаю эту ошибку, используя сценарий регистрации, подобный тому, который вы указали выше. Предупреждение: file_get_contents( graph.facebook.com/me?access_token = ) [function.file-get-contents]: не удалось открыть поток: отказано в подключении
5. ОБНОВЛЕНИЕ: я заменил file_get_contents на curl. Обработка ошибок лучше. Но когда я нажимаю на ссылку «Войти с помощью Facebook» на моем основном сайте на моем регистрационном php, скрипт FB.init, похоже, не работает, поскольку я не могу получить проверку авторизации при входе в систему, и условное перенаправление перенаправляет меня на мой логин, не связанный с facebook, даже когда у меня теперь есть активныйсеанс fb. Любая помощь будет оценена.
Ответ №2:
Я не могу сказать, говорите ли вы о социальных плагинах, но если да, то эти плагины Facebook имеют встроенные в страницы генераторы, которые будут генерировать нужный вам код.
Если вы ищете не плагины, а информацию для пользователей, я все же рекомендую вам запустить генераторы, чтобы получить код и посмотреть, как Facebook получает информацию для пользователей.
Следуя пути простых скриптов, вы попадете туда, где вам нужно быть.
Комментарии:
1. Спасибо за ваш ответ. Мне нужны социальные плагины с расширениями. Простая кнопка входа, регистрация и аутентификация. Мой сайт уже делает это, но я хочу добавить в Facebook новую регистрацию пользователя и обычный доступ пользователя через аутентификацию Facebook. Ничто из того, что я видел на сайте разработчиков facebook или в более широком Интернете, похоже, не дает мне четкого представления о том, что мне нужно, чтобы начать создавать в Facebook доступ к моим существующим файлам php.
2. developers.facebook.com/docs/reference/plugins/login Логин есть, и аутентификация будет автоматически использоваться этим плагином. Вы могли бы использовать i-фрейм для регистрации, поскольку нет API для регистрации нового пользователя. Этот iframe может перейти на домашнюю страницу, где находится регистрация
3. Спасибо за предложение, но я не думаю, что вы полностью понимаете мои требования. Позвольте мне объяснить. Я хочу, чтобы пользователи Facebook, которые никогда раньше не использовали мое веб-приложение, могли зарегистрироваться в моей базе данных MYSQL и получить все атрибуты «обычных» пользователей, включая сеанс «веб-сайт», а не сеанс facebook. Все новые плагины OAuth 2.0 login / register / authentication действительно просты в настройке, но их сложно интегрировать в мой существующий веб-сайт, поскольку я хочу получить информацию о пользователе и сохранить ее в своей базе данных пользователей MYSQL и создать переменные cookie сеанса для пользователя с указанной информацией о пользователе. устаревшие вещи сейчас не работают.