简介
Restful Authentication插件为你生成一个REST风格的认证系统模板,除了支持最基本的用户管理和认证功能外,还有一个可选的邮件激活功能。
作者:Rick Olson
许可: Rails’ (MIT)
SVN仓库:http://svn.techno-weenie.net/projects/plugins/restful_authentication/
安装
./script/plugin install http://svn.techno-weenie.net/projects/plugins/restful_authentication/
使用
1. 生成框架代码 ./script/generate authenticated user sessions --include-activation
这将会生成一个model,以及两个controller:
· models/user.rb,保存用户的登录信息
· controllers/users_controller.rb,提供简单的用户管理功能
· controllers/sessions_controller.rb,提供用户认证支持
–include-activation参数决定是否生成向新注册用户发送激活码的代码(一般不需要)。
2. 这一步是可选的,如果你想你的URL看起来更符合惯例一些,那么在route.rb中添加:
map.signup '/signup', :controller => 'users', :action => 'new'
map.login '/login', :controller => 'sessions', :action => 'new'
map.logout '/logout', :controller => 'sessions', :action => 'destroy'
如果你还想实现:当用户输入http://localhost:3000/时系统直接显示登录界面,那么你要删除./public/index.html文件,然后在路由里添加:
map.connect '/', :controller => 'sessions', :action => 'new'
3. 在你的系统入口添加认证,比如系统入口为公司的index页面,那么就在CompanyController的index方法里添加验证,方法如下:
class CompaniesController < ApplicationController
include AuthenticatedSystem
before_filter :login_required
def index
if defined?(current_user) and ( not current_user.nil?) then
@companies = Company.find(:all)
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @companies }
end
else
redirect_to new_session_path
end
end
..............
end
那么当你第一次在地址栏里输入http://localhost:3000/companies 时系统将自动跳转到
http://localhost:3000/session/new,也就是登录界面,输入用户名、密码后点击登录,如果页面没有跳转,那么你需要修改User(Model)的验证方法authenticate,修改成如下内容:
def self.authenticate(login, password)
# 原代码如下,涉及到 activated_at IS NOT NULL,即第1步生成框架时使用了参数
#–include-activation 的缘故,可能造成验证不成功
# u = find :first, :conditions => ['login = ? and activated_at IS NOT NULL', login]
#修改后的代码如下
u = find_by_login(login) # need to get the salt
u && u.authenticated?(password) ? u : nil
end
4. 控制验证成功后页面跳转的位置:修改SeesionController,找到 redirect_back_or_default('/'),将其修改为你的首页,如redirect_back_or_default('/companies'),这样验证成功后将跳转到conpany列表。