的authenticate_user!来自Devise,在狂欢(狂欢商业)中,当用作before_filter时,不能按预期工作

时间:2012-06-28 18:46:16

标签: ruby-on-rails devise spree

我正在使用Rails(3.2.6)和devise(2.1.2)并且有一个控制器,我希望确保用户在继续之前进行身份验证。

乐观地说,我试过......

module Spree
class MyAppController < Spree::BaseController

before_filter :authenticate_user!

...remainder of MyAppController code...

我没有重定向到登录页面或登录页面。我被重定向到“产品”页面,顶部有礼貌的消息说我需要登录或注册才能继续。

喜欢发生的事情是我被重定向到注册/登录,当成功完成后,原始控制器路径将恢复。

搜索,我已经读过authenticate_user!来自Devise的Spree以一种导致无限重定向的方式与Spree进行交互,因此Spree中的某些东西禁用了这个,导致我上面描述的蹩脚行为。

有没有人设法让这个工作或有一个好的解决方案的建议?

2 个答案:

答案 0 :(得分:1)

我找到了一个解决方案,但我不是一个经验丰富的Rails开发人员,不知道这个解决方案有多合理。

我写了一个方法来进行过滤并使用它来代替authenticate_user!...

def require_authentication
  unless current_user 
    # setting this in the session allows devise to return us to
    # the original invocation path, once sign up / sign in is complete
    session[:user_return_to] = request.env['PATH_INFO']
    redirect_to new_user_session_url and return 
  end 
end

答案 1 :(得分:1)

你尝试添加

吗?
before_filter :check_authorization

到您的控制器?

我认为这可以做你想要的。

由于