Rails身份validation问题

我对rails比较陌生,现在我正在开发一个简单的登录注销系统。

在我的应用程序中,当我登录时生成的URL是:

本地主机:3000 /用户/索引/ 7

当我退出时,我会回到根目录。 但是,如果复制此URL并将其粘贴到另一个浏览器窗口中,我会立即登录而不会被定向到登录表单。 如何纠正这个问题。

我尝试将用户ID存储在会话哈希中,然后在注销时我将会话中的用户ID设置为nil。 但这不起作用。 需要帮助。

编辑:

在我的家庭控制器中

class HomeController ["user_login=? AND user_password=?",params[:user] [:username],params[:user][:password]); if user!=nil session[:user_id]=user.user_id; redirect_to({:controller=>'user'}) end end end 

在用户控制器中我有一个注销方法:

 def logout session[:user_id]=nil; redirect_to({:controller=>'home'}); end 

我的routes.rb文件如下所示:

 ActionController::Routing::Routes.draw do |map| map.root :controller => "home",:action => "index" map.connect ':controller/:action/:id' map.connect ':controller/:action/:id.:format' end 

编辑:

我已经解决了这个问题,我没有在用户控制器索引方法中检查会话哈希中的id值。 但是我有另一个问题如果我在rails 2.3.17中有一个应用程序并且我想将它转移到最新版本我将需要做多少更改

您可以在控制器中为这些操作设置before_filter。 使用before_filter,您可以检查会话是否为nil或值存在。

否则,您可以关注此railscastsvideo

http://railscasts.com/episodes/250-authentication-from-scratch

这是基本身份validation的默认行为。 登录后,所有凭据都存储在由浏览器维护的会话标头中。 如果清除缓存,则应再次提示输入密码….

我真的建议使用现有的身份validation系统,如https://github.com/plataformatec/devise

在这个网站上,您可以轻松地了解其他现有系统,以及流行度和开发活动。 https://www.ruby-toolbox.com/categories/rails_authentication

你真的不必自己编写这样的东西,但如果你真的喜欢这样做,也许这也可以帮助你: http : //railscasts.com/episodes/250-authentication-from-scratch-revised 。 但我建议绝对设计。

我想你正试图在这里重新发明轮子。 您可以在User模型中使用has_secure_password并生成sessions_controller来处理create和destroy。 方法基本相同,但带有has_secure_password标志。 然后你应该正确地破坏会话。