Использование omniauth для подключения к Facebook существующего пользователя с разными разрешениями

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

  1. как использовать devise/omniauth для запроса подключения к facebook без выхода из системы текущего пользователя
  2. запросить у пользователя другие расширенные разрешения (отличные от указанных в файле конфигурации устройства)

Любые идеи? Благодарность


person katzmopolitan    schedule 20.10.2011    source источник


Ответы (2)


Ответ на 1 довольно прост: просто добавьте путь if в метод omniauth_callbacks_controller::process_callback, подобный этому

  # If a user is signed in then he is trying to link a new account
    if user_signed_in?
      if authentication.persisted? # This was a linking operation so send back the user to the account edit page  
        flash[:success] = I18n.t "controllers.omniauth_callbacks.process_callback.success.link_account", 
                                :provider => registration_hash[:provider].capitalize, 
                                :account => registration_hash[:email]
      else
        flash[:error] = I18n.t "controllers.omniauth_callbacks.process_callback.error.link_account", 
                               :provider => registration_hash[:provider].capitalize, 
                               :account => registration_hash[:email],
                               :errors =>authentication.errors
      end  
      redirect_to edit_user_account_path(current_user)

Это то, что я делаю в своем приложении, и оно отлично работает.

Что касается вопроса 2, я не знаю, как поддерживать 2 разные конфигурации аутентификации в facebook, однако мне трудно понять, насколько это полезно для пользователей, поскольку им нужен согласованный опыт по обоим путям: «войти с помощью facebook» и «связать свою учетную запись с facebook». ". (Если вы все еще хотите пойти по этому пути, я бы рассмотрел одну идею — создать новое приложение facebook с его независимыми ключами и конфигурацией...)

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

person Matteo Melani    schedule 02.01.2012
comment
чтобы ответить, мне трудно понять, насколько это полезно для пользователей, поскольку им нужен постоянный опыт, на сайте есть функции, которые требуют большего или меньшего количества разрешений - например, если вы просто хотите простой вход в систему, мы попросим наименьшее количество разрешений. однако, если вы хотите что-то более интересное (например, получить некоторые данные из профиля), нам нужно будет запросить дополнительные разрешения. - person katzmopolitan; 30.01.2012

Одним из простых способов реализации многоуровневых разрешений является использование Facebook Javascript SDK (в дополнение к omniauth, если хотите). Вы можете просто указать другой параметр «область действия», который указывает необходимые разрешения для каждого вызова, который вы хотите. Что я делаю, так это заставляю omniauth предоставлять базовый набор разрешений, а затем, после того, как пользователь подключился через omniauth (и, таким образом, сохранил свои данные в нашей БД), если необходимы дополнительные разрешения, мы показываем их кнопки на основе JS, которые предоставляют расширенные наборы разрешений. Если вы хотите проверить, какие конкретные разрешения предоставил вам пользователь, вы можете просто использовать вызов me/permissions API.

person xji    schedule 16.01.2015