原文位于: http://www.sxlee.com/234.html ,建议看原本 以获得更好的阅读效果
视频信息
下载页面:http://railscasts.com/episodes/160-authlogic
内容介绍:不像 restful_authentication 生成一大堆复杂的代码和文件,authlogic 是一个定制性很高的gem。可以依据实际需要产生最少量的代码和文件,并尽量不污染项目代码。当然,这是有代价的,那就是得多费点力气自己配置。本节通过 演示如何配置一个最简单(支持注册,登录和注销)的认证系统,让观者了解这个gem。
笔记内容
一 相关gem
nifty-generators
简介:集成多个有用的rails文件生成脚本(script/generate)
官网:http://github.com/ryanb/nifty-generators/tree/master
安装:sudo gem in nifty-generators
例子:
script/generate nifty_scaffold user login:string email:string new edit –rspec
将生成:
model:user
migration:create_user
controller:users_controller(有 new, create, edit, update )
view:与controller对应
rspec:对应上面的文件
authlogic
简介:一个干净简洁的基于ruby的验证系统
官网:http://github.com/binarylogic/authlogic/tree/master
安装:sudo gem in authlogic
文档:http://rdoc.info/projects/binarylogic/authlogic
各种实际应用的例子:http://github.com/binarylogic/authlogic_example/tree/master
可以参考例子中的“Tutorial on how to create this app and easily setup Authlogic” ,里面提供了很多额外的配置参考信息。
二 authlogic 最小配置
视频里搭建authlogic最基本的功能所需要创建的文件和添加的代码如下所列:
1 model
user
- 需要下面的列:
login
email
crypted_password
password_salt
persistence_token
- user.rb里加入:acts_as_authentic
让其在创建用户时自动校验数据
可以进行更详细的配置,具体见文档 Authlogic::ActsAsAuthentic 的各个子类
user_session
- 无须migration
- 继承自 Authlogic::Session::Base
- UserSession.find 找到的就是当前用户的session
2 controller
users_controller
负责注册和编辑用户
user_session_controller
负责用户登录和登出:
登录:
UserSession. new ( :login , :password )注销:
@user_session = UserSession. find
@user_session . destroy
3 view
user:new,edit
user_session:new
4 application helper
#application_controller.rb
def current_user_session return @current_user_session if defined ? ( @current_user_session ) @current_user_session = UserSession. find end def current_user return @current_user if defined ? ( @current_user ) @current_user = current_user_session && current_user_session. record end def require_user unless current_user store_location flash [ :notice ] = "You must be logged in to access this page" redirect_to login_path return false end end def require_no_user if current_user store_location flash [ :notice ] = "You must be logged out to access this page" redirect_to users_url return false end end def store_location session [ :return_to ] = request. request_uri end def redirect_back_or_default ( default ) redirect_to ( session [ :return_to ] || default ) session [ :return_to ] = nil end |
5 routes
map.login "/login" , :controller => "user_session" , :action => "new" map.logout "/logout" , :controller => "user_session" , :action => "destroy" map.resources :users map.resource :user_session , :controller => "user_session" |
三 测试相关
Testunit
参考:Authlogic::TestCase
spec
由于 authlogic 默认没有提供 spec 测试相应的helper,因此得自己写一个,代码如下:
# 新建 spec/test_helper.rb
module TestHelper def TestHelper. included obj obj. send : include , Authlogic end module Authlogic def login_as user @user_session = mock ( 'user_session' ) @user_session . stubs ( :record => user ) UserSession. stubs ( :find ) . returns ( @user_session ) end def logout @user_session = nil UserSession. stubs ( :find ) . returns ( nil ) end end end # 在spec/spec_helper.rb中添加 require RAILS_ROOT + '/spec/test_helper.rb' |
用法:
在有需要的controller测试代码中加入:include TestHelper
![rails_casts_logo](http://www.sxlee.com/wp-content/uploads/2009/07/Railscasts_logo1.png)
Rails Casts Note 则是博主观看及实践后的相关笔记,着重于:
介绍与视频内容相关的资源或应用技巧。 记录个人实践过程中遇到的问题及解决方法。 提供足够的资料,供使用时快速参考。