2012-06-28 2 views
0

Я использую Rails (3.2.6) с приложением (2.1.2) и имею контроллер, где бы я хотел убедиться, что пользователи перед проверкой подлинности.authenticate_user! от Devise, в spree (spree commerce), не работает, как ожидалось, когда используется как before_filter

Оптимистично, я попробовал ...

module Spree 
class MyAppController < Spree::BaseController 

before_filter :authenticate_user! 

...remainder of MyAppController code... 

и я НЕ перенаправлен на вход или странице входа в. Я перенаправлен на страницу «Продукты», с вежливым сообщением наверху, говоря, что мне нужно войти в систему или зарегистрироваться, чтобы продолжить.

Что бы я хотел , как, так это то, что я перенаправлен на регистрацию/вход в систему, и когда это будет успешно завершено, исходный путь контроллера возобновится.

Поиск вокруг, я прочитал, что authenticate_user! от Devise взаимодействует со Spree таким образом, чтобы вызвать бесконечное перенаправление, поэтому что-то в Spree отключает это, что приводит к хромому поведению, описанному выше.

Неужели кому-нибудь удалось заставить это работать или есть предложения по хорошей работе?

+0

Я бы рассмотреть это достаточно серьезно, чтобы оправдать сообщение об ошибке в самой Шпрее проекта. Можете ли вы подать файл там? https://github.com/spree/spree/issues. –

+0

Done: Issue # 1734 –

ответ

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

сделал вы попробуйте добавить

before_filter :check_authorization 

к контроллеру?

Я думаю, что может делать то, что вы ищете.

Благодаря

Ash

+0

Спасибо Ash, что * должен * работать - но ведет себя так же, как описано выше (переходит на домашнюю страницу Spree (продукты) и дает мне сообщение о необходимости входа в систему или регистрации перед продолжением) , Очевидно, что в моей базе кода есть что-то гнусное. Это проект, который я унаследовал, и я не являюсь опытным разработчиком RoR, поэтому мне нужно изолировать поведение с помощью небольшого тестового примера. К сожалению, у меня есть надвигающийся крайний срок и обход, поэтому я не уверен, когда смогу это сделать. Еще раз спасибо за помощь. –

Смежные вопросы