0

我正在使用带有设计(2.1.2)的Rails(3.2.6)并且有一个控制器,我想确保在继续之前对用户进行身份验证。

乐观地,我试过...

module Spree
class MyAppController < Spree::BaseController

before_filter :authenticate_user!

...remainder of MyAppController code...

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

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

环顾四周,我读到了authenticate_user!from Devise 与 Spree 的交互方式导致无限重定向,因此 Spree 中的某些东西禁用了这一点,导致我在上面描述的蹩脚行为。

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

4

2 回答 2

1

你尝试添加

before_filter :check_authorization

到你的控制器?

我认为这可能会满足您的需求。

谢谢

于 2012-07-02T15:35:20.810 回答
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
于 2012-06-30T11:44:04.593 回答