仅在Rails中为“admins”请求更多Facebook用户权限

时间:2014-01-05 12:37:20

标签: ruby-on-rails facebook devise omniauth

我正在制作一个有Facebook的网页,其中有简单的用户和管理员。管理员可以将文章发布到网页,当他们这样做时,它会被发布到Facebook页面的墙上。此功能正常,但我在动态Facebook权限方面遇到了一些问题。

在我的omniauth.rb中修改过:

  • :scope =>...." to ":setup => true
  • 我将match '/auth/facebook/setup' => 'authentications#setup_fb'添加到我的路线

然而,当我测试页面时,不会调用setup_fb方法(我已经将logger.info放在其中并且没有发生任何事情)。我该如何解决它,或者您认为问题是什么?

我唯一的想法是“设计会议”与它有关,因为我有:

devise_for ...:controllers => {:sessions => 'sessions'}

我正在使用omniauth-facebook,设计。而且我是铁杆新手:)

1 个答案:

答案 0 :(得分:0)

动态权限与设置阶段

动态权限

所以,听起来你正在为动态权限拍摄,看起来你已经通过:scope => ...正确设置了这个设置,假​​设它看起来像这样

:scope => 'email,user_events,user_location,user_birthday'

设置阶段

所以说,通过传递:setup =>是的,你告诉omniauth启动setup phase,默认情况下会关闭它。

我认为,根据您的问题,如果动态权限正在尝试完成,那么:scope => ...就可以实现这一目标。只需删除:setup => true,让您的回调流程正常继续,而不会在设置阶段中断它。

设计Omniauth回调

我将假设你仍然需要设置回调阶段。

使用Devise执行此操作的常用方法是更改​​config/routes.rb文件以定义自定义回调控制器,如下所示:

devise_for ... controllers: {omniauth_callbacks: 'omniauth_callbacks'}

所以你的看起来像

devise_for ... controllers: {:sessions => 'sessions', :omniauth_callbacks => 'omniauth_callbacks'}

您需要创建控制器app/controllers/omniauth_callbacks_controller.rb并定义Facebook操作。 Controller还应该继承自Devise :: OmniauthCallbacksController。像这样的东西

class OmniauthCallbacksController < Devise::OmniauthCallbacksController
  def facebook
    ... # Do awesome user lookup/sign_in/redirect stuffs
    ... # request.env['omniauth.auth'] holds the returned information your :scope requested 
  end
end

这应解决您的重定向问题。如果您打算使用设置阶段,请告诉我,我可以修改我的答案。