Как я могу указать разрешения Facebook (также известные как область действия), которые OmniAuth запрашивает ДИНАМИЧЕСКИ?

Этот вопрос аналогичен Как я могу указать, какой доступ мне нужен из учетных записей Facebook моего пользователя при использовании OmniAuth? но есть одно предостережение.

Я использую OmniAuth для авторизации пользователей Facebook на своем веб-сайте. Для обычного входа/регистрации допустимо запрашивать у пользователя стандартные разрешения Facebook. Но на моем сайте есть функция, требующая расширенных разрешений (доступ к их фотографиям в Facebook). Я хочу запрашивать расширенные разрешения для пользователей только в том случае, если они используют функцию фотографий нашего сайта на Facebook.

Все ответы, которые я нашел в Интернете о том, как установить разрешения facebook для omniauth, касаются простого добавления параметра области в ваш инициализатор OmniAuth, например:

ActionController::Dispatcher.middleware.use OmniAuth::Strategies::Facebook, 'app_id', 'app_secret', {:scope => 'email,offline_access,the,scope,you,want}

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

Кто-нибудь знает, как это сделать? Заранее спасибо.


person Sean Ahrens    schedule 20.01.2011    source источник


Ответы (3)


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

http://www.mikepackdev.com/blog_posts/2-Dynamically-Requesting-Facebook-Permissions-with-OmniAuth

Надеюсь это поможет!

person Mike    schedule 29.04.2011
comment
Спасибо, Майк! Действительно ценится. Я отправил это некоторым людям, которым я думаю, что это может понадобиться. - person Sean Ahrens; 30.04.2011
comment
Шон, рад слышать, что это помогло! Спасибо за наводку, на моем новом сайте будет больше интересного :) - person Mike; 01.05.2011
comment
действительно здорово, я делал что-то подобное для разных моделей поведения моих пользователей, так что ваше решение идеально интегрируется! большое спасибо! - person Alexis; 07.04.2014

Похоже, что они добавляют это в Omniauth, но он все еще находится в стадии бета-тестирования.

Вы добавляете

:setup => true

своему провайдеру, а затем создайте метод, в котором вы динамически устанавливаете параметры (учетные данные/область действия), которые вам нужны.

https://github.com/intridea/omniauth/wiki/Setup-Phase

https://github.com/intridea/omniauth/wiki/Dynamic-Providers

person johnnymire    schedule 07.03.2011

Я думаю, что вы не можете сделать это правильно. Потому что вы не можете быть уверены, что ваш пользователь использует только функцию фото. Вы, пользователь, можете получить доступ ко всей части вашей функции фото приложения и другим функциям. Когда пользователь входит в систему и переключается с вашей функции фото на другую функцию, вы не можете попросить его повторно войти в систему. для доступа к этой другой функции.

Все пользователи на самом деле не проверяют, какой доступ они разрешают, поэтому не беспокойтесь о большом количестве запросов на разрешение.

person shingara    schedule 20.01.2011
comment
Когда мои пользователи нажимают на ссылку, чтобы использовать мою функцию фотографий, мне легко отправить их на /auth/facebook (даже если они уже вошли в систему) и перенаправить на страницу с фотографиями, если были даны правильные разрешения. Проблема заключается в изменении {:scope = ‹ФОТО РАЗРЕШЕНИЯ›}, когда они нажимают на ссылку, а затем обратно на {:scope = ‹НОРМАЛЬНЫЕ РАЗРЕШЕНИЯ›}, когда они делают это. Мне нужно, если и как можно установить область действия после инициализации приложения, как это. Это на крупном веб-сайте, поэтому процент пользователей, которые отвернутся при входе в систему, потому что для входа в систему требуются разрешения на фото, является серьезной проблемой. - person Sean Ahrens; 20.01.2011