2012-03-20 2 views
4

У меня есть веб-сайт, на котором пользователи могут войти в свою учетную запись на Facebook. Я использую javascript метод FB.login для отображения диалогового окна входа в Facebook. По умолчанию он вызывает отображение нового всплывающего окна. Многие пользователи запретили всплывающие окна в своем браузере. Как заставить диалоговое окно входа в facebook отобразиться в том же окне, где пользователь нажал кнопку «Вход»? Я вижу, что он работает на этом websiteКак открыть диалоговое окно входа в facebook в том же окне вместо всплывающего окна?

Когда пользователь нажимает кнопку «Логин», он перенаправляется на facebook. После входа в FB он перенаправляется обратно на исходный веб-сайт. Все в одной вкладке браузера.

ответ

12

См: https://developers.facebook.com/docs/reference/dialogs/oauth/

Вместо того чтобы использовать FB.login(), просто добавьте ссылку на страницу, как это:

<a href="https://www.facebook.com/dialog/oauth/?client_id=YOUR_APP_ID&redirect_uri=YOUR_REDIRECT_URL&state=YOUR_STATE_VALUE&scope=COMMA_SEPARATED_LIST_OF_PERMISSION_NAMES">LOGIN!</a>

Faceboo K залогирует пользователя в систему и перенаправить их обратно на URL с некоторыми вкусностями на строку запроса:

YOUR_REDIRECT_URI? 
    error_reason=user_denied 
    &error=access_denied 
    &error_description=The+user+denied+your+request. 
    &state=YOUR_STATE_VALUE 
+0

Должен ли YOUR_REDIRECT_URL быть url_encoded? –

+0

Я пробовал этот путь, но получил эти параметры только после возврата facebook обратно в мой URI «given_scopes = email, public_profile & denied_scopes # _ = _», что мне делать дальше? Любые предложения приветствуются ~ – RRTW

+0

Спасибо, Это спасло мой день! –

0

набор сенсорный дисплей сделать трюк

пример

form method="get" action="https://graph.facebook.com/oauth/authorize" id="openid_form">  
    <input type="hidden" value="" name="client_id" id="client_id"/> 
    <input type="hidden" value="touch" name="display" id="display"/> 

    <input type="hidden" value="http://www.mobileborg.com/modules/openid/fb_callbackuri.php" name="redirect_uri" id="redirect_uri"/> 
    <input type="hidden" value="email,read_stream,user_location,user_hometown,read_friendlists,user_photos,user_videos,publish_stream,offline_access" name="scope" id="scope"/> 

    <div style="display:block"> 
    <input type="hidden" name="oid_name" id="oid_name"/> 
    <input type="hidden" size="40" class="openid-identifier" name="openid_identifier" id="openid_identifier"/> 
    <input type="submit" style="display:none" value="Login" id="submit-button"/> 
    </div> 
</form 
+0

спасибо, что ответите. Я бы предпочел решение, в котором вы не используете форму. У меня есть элемент div с прикрепленным событием onclick. После того, как пользователь нажимает на div (кнопка входа в систему), вызывается метод FB.login. –

0

Согласно Facebook documentation вы можете использовать display=page, который откроет в одном окне браузера.

+1

Кто-нибудь, пожалуйста, объясните, почему это было отменено? – coderama

+0

У меня есть ошибка: '' display 'должен быть одним из «всплывающих», «диалогов», «iframe», «touch», «async», «hidden» или «none» ' – shlensky

0

Моя проблема заключалась в том, что у меня включен модуль «External Links». Он видел URL-адрес facebook как внешний и сразу же добавил target = "_ blank", в результате чего все клики открывались в новом окне.

Смежные вопросы