Rails:link_to_unless_current的页面保护重定向问题

时间:2008-10-10 17:31:42

标签: ruby-on-rails ruby

使用before_filter :login_required保护特定页面时,应用程序布局模板中的link_to_unless_current方法会将登录页面的“登录”链接呈现为超链接,而不仅仅是文本。

“登录”文本/链接问题仅在通过before_filter机制重定向到登录页面时发生,否则link_to_unless_current方法按预期运行。

似乎link_to_unless_current使用旧页面数据作为“当前”而不是登录页面(重定向时)。

2 个答案:

答案 0 :(得分:1)

您可以使用路由帮助程序方法执行页面重定向:

 redirect_to login_url

如果定义了登录的“命名路由”(通过在“config / routes.rb”文件中添加“/ login”的显式路径来完成)。

此路径实际上与:

生成的路径相同

new_session_url

有关路由的详细信息,我建议使用Rails Routing Guide

答案 1 :(得分:0)

欣赏回复,你可以根据问题的性质来判断我们是否是新手。顺便说一句,我们在这个网站上发布了同样的问题:http://railsforum.com(不确定它是否是官方的铁路论坛)但还没有回复。 StackOverflow到目前为止似乎正在创建一个伟大的帮助者社区,愿意接触到以编程方式挑战的人。

我认为问题的一部分是我们将宁静的网址与标准路线混合在一起。登录页面映射到restful route“/ login”,但页面重定向使用“/ sessions / new”(Rick Olson的restful认证模块)

在application.rb中,我们强制过滤器为“/ login”,这解决了问题:

before_filter :login_required

protected

def login_required
  return true if logged_in?
  session[:return_to] = request.request_uri
  flash[:error] = "Please log in first"
  redirect_to "/login" and return false
end

评论这种方法的技术优点,因为它可能对其他新手有所帮助。

谢谢, 乔