Автоматический вход пользователей приложения FB на мой сайт

На моем сайте пользователь может войти через Facebook. Я также создал приложение для холста Facebook, которое состоит из небольшой части моего веб-сайта.

Через приложение Facebook Canvas пользователь может получить доступ к определенным функциям сайта в отношении своей учетной записи на сайте.

Это прекрасно работает, когда пользователь получает доступ к приложению FB, уже войдя на сайт. Однако, если пользователь получает доступ к приложению FB, НЕ войдя на мой сайт, как мне войти на мой сайт через приложение?

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

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

Отказался отображать 'https://www.facebook.com/dialog/oauth?response_type=code&client_id=…nLpHx7N5X--Q» во фрейме, потому что для параметра «X-Frame-Options» установлено значение «DENY».

Резюме:

  1. Могу ли я автоматически входить на свой сайт при доступе к сайту через канву Facebook
  2. Если нет, то как пользователь может войти на мой сайт через приложение на основе холста?

person Jack Alexander    schedule 01.04.2016    source источник
comment
Таким образом, у вас фактически есть два входа в систему, один для вашего сайта и один для приложения Facebook? Как связаны аккаунты? Используете ли вы какой-либо фреймворк для своего сайта и его системы входа? (Обычно они предоставляют методы для выполнения действия входа в систему с помощью кода.)   -  person CBroe    schedule 01.04.2016
comment
@CBroe Я использую ASP.NET MVC. Учетные записи подключены через Oauth, например. пользователь может зарегистрироваться на моем сайте, используя Facebook oauth.   -  person Jack Alexander    schedule 01.04.2016
comment
@CBroe И пользователь должен использовать один и тот же логин как для приложения, так и для сайта. Сценарий, который я описываю, заключается в том, где пользователь получает доступ к моему приложению FB (очевидно, он входит в FB), но не входит на мой сайт.   -  person Jack Alexander    schedule 01.04.2016
comment
Итак, в основном ваша проблема заключается в том, как вызвать диалоговое окно входа в FB из холста? Если вы используете версию с перенаправлением URL-адресов, вы должны вызывать ее в верхнем экземпляре окна — диалоговое окно входа в систему не может отображаться ни в каком (i) фрейме по соображениям безопасности. Или просто используйте JS SDK и его метод FB.login (это в любом случае делает работу пользователя на холсте намного приятнее, потому что пользователю не нужно покидать холст, а диалоговое окно входа отображается как модальное диалоговое окно).   -  person CBroe    schedule 01.04.2016
comment
@CBroe Теперь я успешно вошел в систему, используя JS SDK (FB.login). Однако, когда я обновляюсь, мой веб-сайт по-прежнему перенаправляет на страницу входа (это означает, что, по-видимому, мой сайт не распознал, что пользователь вошел на мой сайт). (Я использую стандартную настройку авторизации ASP.NET MVC, если вы с ней знакомы)   -  person Jack Alexander    schedule 01.04.2016
comment
Нет, не знаком с этим. Я знаю, что PHP SDK и JS SDK могут работать рука об руку с помощью файлов cookie FB, установленных в домене приложения; но это не обязательно означает, что другие серверные фреймворки реализованы таким же образом. В качестве альтернативы вы можете продолжить процесс входа на стороне сервера, вам просто нужно вызвать URL-адрес входа в верхнем экземпляре окна (например, top.location.href=… в JavaScript или target="_top" для простой ссылки).   -  person CBroe    schedule 01.04.2016
comment
@CBroe В итоге я сделал именно это, и это работает. Большое спасибо.   -  person Jack Alexander    schedule 02.04.2016
comment
ОК, добавил основные биты в качестве ответа.   -  person CBroe    schedule 02.04.2016


Ответы (1)


Таким образом, ваша проблема заключалась в том, как вызвать диалоговое окно входа в FB из холста. Если вы используете версию с перенаправлением URL-адресов, вы должны вызывать ее в верхнем экземпляре окна — диалоговое окно входа в систему не может отображаться ни в каком (i) фрейме по соображениям безопасности¹

Этого можно добиться с помощью top.location.href=… в JavaScript или target="_top" для простой ссылки.


¹ Пользователь должен иметь возможность подтвердить через адресную строку, что он вводит свои учетные данные на facebook.com, чтобы предотвратить фишинговые атаки.

person CBroe    schedule 01.04.2016