`
hideto
  • 浏览: 2678346 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

每天一剂Rails良药之Authentication

    博客分类:
  • Ruby
阅读更多
今天我们来看看Rails怎么处理登录认证
虽然Rails有很多登录认证的插件,但是我们可以自己动手丰衣足食

1,db/migrate/001_add_user_table.rb
class AddUserTable < ActiveRecord::Migration
  def self.up
    create_table :users do |t|
      t.column :username, :string
      t.column :password_salt, :string
      t.column :password_hash, :string
    end
  end

  def self.down
    drop_table :users
  end
end


2,app/models/user.rb
class User < ActiveRecord::Base
  validates_uniqueness_of :username

  def password=(pass)
    salt = [Array.new(6){rand(256).chr}.join].pack("m").chomp
    self.password_salt, self.password_hash = salt, Digest::SHA256.hexdigest(pass + salt)
  end

  def self.authenticate(username, password)
    user = User.find(:first, :conditions => ['username = ?', username])
    if user.blank? || Digest::SHA256.hexdigest(password + user.password_salt) != user.password_hash
      raise "Username or password invalid"
    end
    user
  end
end


3,app/controllers/admin_controller.rb
class AdminController < ApplicationController
  before_filter :check_authentication, :except => [:signin_form, :signin]

  def check_authentication
    unless session[:user]
      session[:intended_action] = action_name
      redirect_to :action => :signin_form
    end
  end

  def signin
    session[:user] = User.authenticate(params[:username], params[:password]).id
    redirect_to :action => session[:intended_action]
  end

  def signout
    session[:user] = nil
    redirect_to home_url
  end

end


4,app/views/sign_form.rhtml
<html>
  <head>
    <title>Signin for Admin Access</title>
  </head>
  <body>
    <%= start_form_tag :action => "signin" %>
      <label for="username">Username:</label>
      <%= text_field_tag "username" %><br/>
      <label for="password">Password:</label>
      <%= text_field_tag "password" %><br/>
      <%= submit_tag "Sign in" %>
    <%= end_form_tag %>
  </body>
</html>

我们也可以将check_authentication方法放到application.rb里面,供其他Controllers使用
分享到:
评论
6 楼 dashuang 2012-02-14  
 
5 楼 dashuang 2012-01-21  
   
4 楼 kewin 2010-12-03  
这个还比较简单阿 
3 楼 iigm 2007-09-05  
没看明白
2 楼 hideto 2007-08-12  
错误提示说了,把signin_form.rhtml放到app/views/user/目录下
1 楼 danielking 2007-08-12  
我把signin_form.rthml放在了views的根目录,就提示这个了:
No such file or directory - ./script/../config/../app/views/user/signin_form.rhtml

怎么回事?

相关推荐

    关于Rails登录和验证插件http_authentication restful-authentication

    Rails是一个流行的开源Web应用程序框架,基于Ruby编程语言。在Rails应用中实现用户登录和验证是构建任何Web服务的基础。本文将深入探讨Rails中的http_authentication和restful-authentication插件,这两种方法都常...

    Rails 101 入门电子书

    《Rails 101 入门电子书》是一本非常适合初学者直接入门的书籍,它由xdite编写并出版于2014年6月10日。本书主要针对的是希望学习Ruby on Rails框架的读者,特别是那些想要从零开始掌握这项技术的新手。 #### 二、...

    Rails101_by_rails4.0

    《Rails101_by_rails4.0》是一本专注于Rails 4.0.0版本和Ruby 2.0.0版本的自学教程书籍,它定位于中文读者,旨在成为学习Rails框架的参考教材。Rails(Ruby on Rails)是一个采用Ruby语言编写的开源Web应用框架,它...

    Rails之道.pdf(最新版)

    《Rails之道》详细讨论了Rails的程序代码并通过分析Rails中的代码片段来深入解释它的功能,同时,《Rails之道》部分章节也摘录了一些API文档中的内容,使读者能够快速地找到对应的API文档、相关的示例代码以及深入的...

    Rails项目源代码

    Ruby on Rails,通常简称为Rails,是一个基于Ruby编程语言的开源Web应用框架,遵循MVC(Model-View-Controller)架构模式。这个“Rails项目源代码”是一个使用Rails构建的图片分享网站的完整源代码,它揭示了如何...

    rails 项目起步示例

    Rails是Ruby语言的一个著名Web开发框架,全称为Ruby on Rails,它遵循MVC(Model-View-Controller)架构模式,旨在提高开发效率和代码可读性。本示例"rails项目起步示例"是一个购物系统,非常适合初学者入门学习。 ...

    关于rails 3.1 cucumber-rails 1.2.0

    首先,Rails 3.1是Ruby on Rails框架的一个版本,它在2011年发布。这个版本引入了一些显著的改进,如Asset Pipeline(资产管道)和CoffeeScript支持。Asset Pipeline允许开发者更有效地管理和优化应用程序的前端资源...

    rails2-sample

    MVC是Rails的核心架构之一,这一章节将详细介绍这三个组件的作用和相互关系。模型负责与数据库交互,管理数据;视图用于展示数据给用户;控制器则处理用户请求,协调模型和视图之间的操作。了解并正确运用MVC模式是...

    Rails之道.pdf 高清 带书签

    Rails之道.pdf 高清 带书签

    Rails

    标题 "Rails" 指的是 Ruby on Rails,一个开源的Web应用程序框架,它基于Ruby编程语言,遵循MVC(模型-视图-控制器)架构模式。Rails由David Heinemeier Hansson在2004年创建,其设计理念是强调代码的简洁性、DRY...

    Ruby-Rails实战之B2C商城开发

    在本项目"Ruby-Rails实战之B2C商城开发"中,我们将深入探索使用Ruby on Rails这一强大的Web开发框架来构建一个完整的B2C(Business-to-Consumer)在线商城。Rails是Ruby语言的一个核心框架,以其MVC(Model-View-...

    使用Aptana+Rails开发Rails Web应用(中文)

    Aptana是一款强大的集成开发环境(IDE),尤其适用于Rails项目的开发,它提供了丰富的特性来提升开发效率。本教程将详细介绍如何使用Aptana与Rails结合,创建一个功能完备的Web应用程序。 首先,我们需要安装Aptana...

    rails指南 中文版

    Rails指南中文版是针对Ruby on Rails框架的一份详尽教程,旨在帮助开发者深入理解并熟练掌握这个强大的Web应用开发工具。Ruby on Rails(简称Rails)是一个基于Ruby语言的开源Web应用框架,它遵循MVC(Model-View-...

    Web开发敏捷之道--应用Rails进行敏捷Web开发 之 Depot代码。

    标题中的“Web开发敏捷之道--应用Rails进行敏捷Web开发 之 Depot代码”表明这是一个关于使用Ruby on Rails框架进行敏捷Web开发的示例项目,名为Depot。Ruby on Rails(简称Rails)是一个开源的Web应用程序框架,它...

    Ruby on Rails Guides v2 - Ruby on Rails 4.2.5

    - **步骤**:通过命令行使用`rails new project_name`来初始化一个新的Rails项目。 - **结构**:新项目将包含默认的目录结构,如`app`、`config`、`db`等,分别用于存放应用程序代码、配置文件、数据库迁移脚本等。 ...

Global site tag (gtag.js) - Google Analytics