使用omniauth到facebook连接具有不同权限的现有用户

时间:2011-10-20 14:47:38

标签: facebook devise omniauth

我正在使用devise / omniauth进行facebook身份验证,效果很好。但是,我想添加一个流程,其中现有(非Facebook)用户有能力将他的帐户与Facebook连接。这将需要不同的Facebook权限。所以我似乎无法找到两件事

  1. 如何使用devise / omniauth请求facebook连接而不登出当前用户
  2. 请求用户使用不同的扩展权限(与设计配置文件中指定的权限不同)
  3. 任何想法?感谢

2 个答案:

答案 0 :(得分:2)

对1的回答非常简单:只需在这样的omniauth_callbacks_controller :: process_callback方法中添加一个if路径

  # 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应用程序......)

希望得到这个帮助。

答案 1 :(得分:0)

实现多层权限的一种简单方法是使用Facebook Javascript SDK(如果需要,还可以使用omniauth)。您可以简单地指定不同的"范围"参数,指定您希望的每次调用所需的权限。我正在做的是让omniauth提供一组基本权限,然后,用户通过omniauth连接之后(并因此将数据存储在我们的数据库中),如果需要进一步的权限,我们向他们展示了基于JS的按钮,它们提供了扩展的权限集。如果您想查看用户授予您的特定权限,您可以使用me/permissions API调用。