我对rails很新,现在我正在开发一个简单的登录系统。
在我的应用程序中,当我登录生成的URL时:
本地主机:3000 /用户/索引/ 7
当我退出时,我会回到根目录。但是如果复制此URL并将其粘贴到另一个浏览器窗口中,我会立即登录而不会被定向到登录表单。如何纠正这个问题。
我尝试将用户ID存储在会话哈希中,然后在注销时我将会话中的用户ID设置为nil。但这不起作用。需要帮助。
编辑:
在我的家庭控制器中
class HomeController < ApplicationController
def signin
user=User.find(:all,:conditions=>["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中有一个应用程序并且我想将它转移到最新版本我将需要进行多少更改
答案 0 :(得分:2)
您可以在控制器中为这些操作设置before_filter。使用before_filter,您可以检查会话是否为nil或值。
否则你可以关注这个railscasts视频
http://railscasts.com/episodes/250-authentication-from-scratch
答案 1 :(得分:0)
这是基本身份验证的默认行为。登录后,所有凭据都存储在由浏览器维护的会话标头中。如果清除缓存,则应再次提示输入密码....
答案 2 :(得分:0)
我认为你正试图在这里重新发明轮子。您可以在用户模型中使用has_secure_password
并生成sessions_controller
来处理创建和销毁。方法基本相同,但带有has_secure_password
标志。然后你应该正确地破坏会话。
答案 3 :(得分:0)
我真的建议使用现有的身份验证系统,例如https://github.com/plataformatec/devise
在此网站上,您可以轻松了解其他现有系统以及流行度和开发活动。 https://www.ruby-toolbox.com/categories/rails_authentication
你真的不必自己编写这样的东西,但如果你真的喜欢这样做,也许这也可以帮助你:http://railscasts.com/episodes/250-authentication-from-scratch-revised。但我建议绝对设计。