2013-05-03 177 views
0

我对rails比较陌生,现在我正在开发一个简单的登录注销系统。Rails身份验证问题

在我的应用程序,当我登录生成的网址是:

本地主机:3000 /用户/指数/ 7

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

我试图存储用户ID在会话哈希,然后退出时我已经在会话中设置用户ID为零。但那不行。需要帮助。

编辑:

在我家的控制器

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 

在用户控制器我有一个logout方法:

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值。不过,我还有一个问题,如果我有在轨2.3.17的应用程序,我想将它转移到最新版本,我会多少改变必须做出

+0

你如何实现基本认证? – 2013-05-03 11:10:23

+0

在我的家庭控制器中: – 2013-05-03 11:13:32

+1

您使用的是哪个版本的Rails? – Dogbert 2013-05-03 12:05:05

回答

0

这是基本身份验证的默认行为。登录后,所有凭据都将存储在由浏览器维护的会话标题中。如果你清除你的缓存,那么它应该再次提示输入密码....

+0

downvote的原因??? – 2013-05-03 11:39:03

+0

+1纠正这种不公正。 – 2013-05-03 17:11:06

0

我认为你正试图在这里重新发明轮子。您可以在用户模型中使用has_secure_password,并生成sessions_controller以处理创建和销毁。方法基本相同,但是标记为has_secure_password。然后,您应该妥善保管会话。

+0

'has_secure_password'对会话没有任何帮助。只要它具有'password_digest'属性,它只会添加一些方法来验证模型。开发人员负责清除会话属性设置为进行登录。 – 2013-05-03 12:28:15

+0

如果您想了解更多关于has_secure_password的信息,我认为这可以帮助您http://railscasts.com/episodes/270-authentication-in -rails-3-1 – Mattherick 2013-05-03 12:55:21

0

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

在这个网站上,你可以很容易地获得有关其它现有系统的概述,并有普及和发展的活动。 https://www.ruby-toolbox.com/categories/rails_authentication

你真的鸵鸟政策必须自己这样的东西编程,但如果你真的喜欢这样做,也许这也可以帮助你:http://railscasts.com/episodes/250-authentication-from-scratch-revised。但我绝对推荐设计。

+0

我喜欢'devise',它是一个伟大的宝石,但对于刚刚学习Rails或Ruby的人来说,我不会建议在开始时跳转到使用这些,因为它倾向于抽象出所有关于框架/语言真棒的东西。 Railscasts插曲虽然是很好的建议。 – 2013-05-03 14:20:28