Rails一个小项目的研究笔记
2012-07-13 17:01
120 查看
紧接着上一篇文章
http://blog.csdn.net/hexudong08/article/details/7744597
如何实现一个简单的认证系统,不用devise?
这个项目使用了一个简单的用户认证系统,清爽,不许要devise那么多的功能。很简单。
具体的代码分析如下》
1, 用户注册
非常的简单,就是将数据保存入数据库,然后 sign_in ,关键是sign_in代码。 sign_in代码定义在helper方法里,使用include 入 ApplicationController 中
sessions_helper.rb中定义的方法
将用户的remember_token放到cookies中, 然后给实例变量 @current_user 赋值,很简单。 看看remember_token是如何生成的
user model中的方法如下
值得注意的是, User model中使用了如下的方法
这段代码,有什么作用?这是Rails系统自带的方法,如下是它的源代码
1, 定义一个只读属性 password
2, 定义了另外两个属性 password_confirmation(注册时候需要), password_digest
所以,需要在数据库中定义一个字段, password_digest
如下是他的使用实例
2, 如何认证用户的访问
这样来取得当前用户
http://blog.csdn.net/hexudong08/article/details/7744597
如何实现一个简单的认证系统,不用devise?
这个项目使用了一个简单的用户认证系统,清爽,不许要devise那么多的功能。很简单。
具体的代码分析如下》
1, 用户注册
def create @user = User.new(params[:user]) if @user.save sign_in @user flash[:success] = "Welcome to the Sample App!" redirect_to @user else render 'new' end end
非常的简单,就是将数据保存入数据库,然后 sign_in ,关键是sign_in代码。 sign_in代码定义在helper方法里,使用include 入 ApplicationController 中
class ApplicationController < ActionController::Base protect_from_forgery include SessionsHelper end
sessions_helper.rb中定义的方法
def sign_in(user) cookies.permanent[:remember_token] = user.remember_token current_user = user end def current_user=(user) @current_user = user end def current_user @current_user ||= user_from_remember_token end def current_user?(user) user == current_user end def signed_in? !current_user.nil? end def signed_in_user unless signed_in? store_location redirect_to signin_path, notice: "Please sign in." end end
将用户的remember_token放到cookies中, 然后给实例变量 @current_user 赋值,很简单。 看看remember_token是如何生成的
user model中的方法如下
before_save :create_remember_token private def create_remember_token self.remember_token = SecureRandom.urlsafe_base64 end
值得注意的是, User model中使用了如下的方法
has_secure_password
这段代码,有什么作用?这是Rails系统自带的方法,如下是它的源代码
def has_secure_password # Load bcrypt-ruby only when has_secure_password is used. # This is to avoid ActiveModel (and by extension the entire framework) being dependent on a binary library. gem 'bcrypt-ruby', '~> 3.0.0' require 'bcrypt' attr_reader :password validates_confirmation_of :password validates_presence_of :password_digest include InstanceMethodsOnActivation if respond_to?(:attributes_protected_by_default) def self.attributes_protected_by_default super + ['password_digest'] end end end
1, 定义一个只读属性 password
2, 定义了另外两个属性 password_confirmation(注册时候需要), password_digest
所以,需要在数据库中定义一个字段, password_digest
如下是他的使用实例
# class User < ActiveRecord::Base # has_secure_password # end # # user = User.new(:name => "david", :password => "", :password_confirmation => "nomatch") # user.save # => false, password required # user.password = "mUc3m00RsqyRe" # user.save # => false, confirmation doesn't match # user.password_confirmation = "mUc3m00RsqyRe" # user.save # => true # user.authenticate("notright") # => false # user.authenticate("mUc3m00RsqyRe") # => user # User.find_by_name("david").try(:authenticate, "notright") # => nil # User.find_by_name("david").try(:authenticate, "mUc3m00RsqyRe") # => user
2, 如何认证用户的访问
def user_from_remember_token remember_token = cookies[:remember_token] User.find_by_remember_token(remember_token) unless remember_token.nil? end
这样来取得当前用户
相关文章推荐
- RubyChina源代码研究笔记:Rails3+Mongodb: 如何在Rails项目中整合Mongodb
- Rails简单的项目研究笔记一
- Rails 学习笔记第一篇(建立一个玩具项目)
- [Kails] 一个基于 Koa2 构建的类似于 Rails 的 nodejs 开源项目
- C++库研究笔记——使用函数模板还是类模板?+ 一个类型重复问题的两种解决方法
- 【MSN Direct研究笔记】MSN Direct项目简介
- 【MSN Direct研究笔记】MSN Direct项目简介
- Searcharoo —— 一个适合学习研究的搜索引擎项目
- JavaEE完全实战详解笔记--在Eclipse中创建一个简单的web项目
- Nutch学习笔记10---一个bug引发Http协议研究
- 准备用PHP做一个论坛小项目,来终止PHP的深入研究。准备转.net了
- 一个开源项目维护者的笔记:为什么我关闭 PR
- 一个开源项目,感兴趣的朋友研究一下吧:P
- Webx3.0学习笔记(二):创建一个简单的Webx项目
- soapui笔记3:创建一个新的项目
- iOS-一个新项目的初建(笔记)
- mysql笔记(一)--设计一个项目需求,灌入一万数据先
- Rails实现一个blog项目01-基本功能blog和comment的实现
- 笔记1-1: 实现一个简单的ls列出目录中的所有项目的程序