论坛首页 编程语言技术论坛

rails登录功能的实现

浏览 6101 次
精华帖 (2) :: 良好帖 (0) :: 新手帖 (7) :: 隐藏帖 (14)
作者 正文
   发表时间:2010-05-27  
终于做出了注册和登录,和大家分享一下,也请大家指正错误。

controller代码
def login
    session[:user.id] = nil
     if request.post?
        user = User.authenticate(params[:email],params[:password])
           if user
           session[:user_id] = user.id
           redirect_to(:action =>"index")
           else
           flash[:notice] = '邮箱地址或密码错误'
            redirect_to(:action =>"login")
            end
      end
   end 
model代码user.rb

def self.authenticate(email,password)
   user = self.find_by_email(email)
  if user
    expected_password = encrypted_password(password,user.salt)
    if user.hashed_password != expected_password
      user = nil
    end
  end
  user
end

private
  def self.encrypted_password(password,salt)
    string_to_hash = password + "song" + salt
    Digest::SHA1.hexdigest(string_to_hash)
  end
def password
  @password
end

def password=(pwd)
  @password = pwd
  return if pwd.blank?
  create_new_salt
  self.hashed_password = User.encrypted_password(self.password,self.salt)
end

  def create_new_salt
    self.salt = self.object_id.to_s + rand.to_s
  end

数据库迁移文件
class CreateUsers < ActiveRecord::Migration
  def self.up
    create_table :users do |t|
      t.column :email,:string
      t.column :hashed_password,:string
      t.column :salt,:string
      t.timestamps
    end
  end

  def self.down
    drop_table :users
  end
end
视图login.html.erb
<% form_tag do%>
<div class="form_row">
<label>邮箱:</label><%= text_field("user","email",:size=>"30")%>(请正确输入您的5-20位用户名)
</div>
<div class="form_row">
<label>密码:</label><%= password_field("user","password",:size=>"36")%>(请正确输入您的8-36位密码)
</div>
<div id="button">
<span><%= submit_tag '用户登录'%></span>


程序已经运行出来了,但是无论如何登录不进去,我保证密码和email没有输入错误,这是怎么回事呢?迷惑中,将继续努力寻找答案,也请大家给点意见。
   发表时间:2010-05-27  
这东西有插件,尽量多用插件,减少重复劳动
0 请登录后投票
   发表时间:2010-05-28   最后修改:2010-05-28
哎,你贴出来这个代码没法看啊,乱的
建议多加几处 logger.debug 看看运行期的结果
0 请登录后投票
   发表时间:2010-05-30   最后修改:2010-05-30
http://www.cnblogs.com/rubylouvre/archive/2009/07/01/1512895.html
restful-authentication + declarative authorization
哥们,你可以考虑下用这两个插件弄弄,也许效果更好...(上面是参考案例)另外,代码最好高亮下...
另外,给你推荐下这个http://www.opensourcerails.com,可以看看别人是怎么做的
0 请登录后投票
   发表时间:2010-06-03  
fireflyman 写道
http://www.cnblogs.com/rubylouvre/archive/2009/07/01/1512895.html
restful-authentication + declarative authorization
哥们,你可以考虑下用这两个插件弄弄,也许效果更好...(上面是参考案例)另外,代码最好高亮下...
另外,给你推荐下这个http://www.opensourcerails.com,可以看看别人是怎么做的

谢谢,这个资料非常详细!
0 请登录后投票
   发表时间:2010-06-03  
如果需要加入大量自己的代码,可以考虑nifty-generators
0 请登录后投票
   发表时间:2010-06-03  
sirxenofex 写道
这东西有插件,尽量多用插件,减少重复劳动

直接装一下插件就可以了?
0 请登录后投票
   发表时间:2010-06-03  
此乃马甲 写道
sirxenofex 写道
这东西有插件,尽量多用插件,减少重复劳动

直接装一下插件就可以了?

你裝完當然要再看看文檔啦...或者找些別人做過的實例參考下就行了.一般情況下,github里的說明文檔足夠你使用插件了.
0 请登录后投票
   发表时间:2010-06-10  
fireflyman 写道
此乃马甲 写道
sirxenofex 写道
这东西有插件,尽量多用插件,减少重复劳动

直接装一下插件就可以了?

你裝完當然要再看看文檔啦...或者找些別人做過的實例參考下就行了.一般情況下,github里的說明文檔足夠你使用插件了.

那还写什么程序。。。整天装插件吧
0 请登录后投票
   发表时间:2010-06-10  
此乃马甲 写道
fireflyman 写道
此乃马甲 写道
sirxenofex 写道
这东西有插件,尽量多用插件,减少重复劳动

直接装一下插件就可以了?

你裝完當然要再看看文檔啦...或者找些別人做過的實例參考下就行了.一般情況下,github里的說明文檔足夠你使用插件了.

那还写什么程序。。。整天装插件吧

用的上固然好..用不上就自己寫憋...
插件只是減少你一些工作量....有好的東西當然要用下拉...你也可以看看人家是怎么實現的,根據自己需求改改也是不錯的...
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics