Позвольте мне сначала сформулировать вопрос:
Как пройти через параметры во время входа в Devise?
Теперь остальное ...
Я пытаюсь реализовать следующие функции в моем приложении Rails 3.
У меня есть коллекция пользователей, каждый со своей страницей профиля. Я хочу, чтобы они могли просматривать свою собственную страницу профиля, но не одну из страниц профиля других пользователей, если только они не администраторы, и в этом случае у них есть доступ ко всему в приложении.
Я создал контроллер Users и применил следующий код к началу контроллера (для записи я заменил поиск по id на их имя пользователя, поэтому / users / username для доступа к профилю):
filter_access_to :all do
current_user == User.find_by_username(params[:id]) or
has_role? :admin
end
... и я указал вways.rb:
root :to => "users#show"
Таким образом, предполагая, что когда пользователь получил доступ к следующему URL: http://appli.cat.ion, ему сначала будет предложено ввести кредит для входа в систему, а затем перенаправлен на root_path, который является действием show контроллера Users. Если я не смогу передать параметр: id во время входа в систему, это приведет к бесконечному циклу перенаправления. Есть ли что-то в Devise, что помогает с этой проблемой? Я буду самостоятельно искать и отправлять ответ, если найду один.
Спасибо
Les
РЕДАКТИРОВАТЬ # 1 : Я считаю, что я подошел ближе к решению. Основываясь на желаемой функциональности, которая мне нужна, я считаю, что следующие два метода Devise могут помочь:
after_sign_in_path_for(resource)
и
stored_location_for(resource)
Я переопределил after_sign_in_path к следующему:
def after_sign_in_path_for(resource)
user_root_path(:id => current_user.username)
end
, который обеспечивает желаемый эффект (пользователь входит в систему, перенаправляется на страницу своего профиля), но только если я верну nil в сохраненном_документации, например:
def stored_location_for(resource)
nil
end
Просто, чтобы повторить мою цель, моя цель состоит в том, чтобы перенаправить пользователя на страницу его профиля, если он перешел по адресу (http): //appli.cat.ion/ напрямую, после чего он, конечно, вошел в систему. Если пользователь переходит, скажем, к (http): //appli.cat.tion/otherresources, я хочу сначала войти в систему, а затем перенаправить его на запрошенную страницу. Если я верну nil в store_location_for, то пользователь ВСЕГДА будет перенаправлен на страницу своего профиля, несмотря ни на что, что в лучшем случае нежелательно, а в худшем - непригодно. Я бы подумал, что если я перейду к входу в приложение напрямую, то storage_location вернет nil, а после входа будет перенаправлен на страницу моего профиля, но он просто перенаправит меня на путь root_path. Очень смущен, но, по крайней мере, я делаю успехи ...