我正在制作一个有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,设计。而且我是铁杆新手:)
答案 0 :(得分:0)
所以,听起来你正在为动态权限拍摄,看起来你已经通过:scope => ...
正确设置了这个设置,假设它看起来像这样
:scope => 'email,user_events,user_location,user_birthday'
所以说,通过传递:setup =>是的,你告诉omniauth启动setup phase,默认情况下会关闭它。
我认为,根据您的问题,如果动态权限正在尝试完成,那么:scope => ...
就可以实现这一目标。只需删除:setup => true
,让您的回调流程正常继续,而不会在设置阶段中断它。
我将假设你仍然需要设置回调阶段。
使用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
这应解决您的重定向问题。如果您打算使用设置阶段,请告诉我,我可以修改我的答案。