2.2.3 实现用户登录
我们希望firstApp应用中具有用户登录功能,并且在用户登录页面中提供用户注册的链接。
由于scaffold生成器生成的文件中,没有类似用户登录的页面,因而我们自己在/app/views/user路径下新建一个login.rhtml视图文件。其代码片段如下:
<table valign="top" width="100%" border="0" cellspacing="0" cellpadding="0"> |
上面的代码中,flash[:notice]是一个临时的值存取器,用于Action之间的通信。在一个Action中往flash[:notice]中存放数据,然后可在下一个Action中将这些数据取出。这样,当用户注册成功后,可重定向到login Action,取回register Action写进flash[:notice]的提示信息。
另外,上面的代码遍历了Errors对象中的每一个元素,手动输出模型校验过程中的错误信息。
接着,需要在user_controller.rb控制器文件中添加login方法的定义。代码片段如下:
def login |
上面的代码首先判断用户请求是否为GET请求,如果是,将session[:user_id]清空;如果不是,则构造一个新的User对象,并用接收到的user参数来初始化该对象。然后,对用户输入的数据进行手动校验:校验User对象的name属性和password属性的值不能为空。并通过调用User模型中自定义的try_to_login方法,检查输入的用户对象是否合法。如果通过了所有的校验,将合法的用户ID写入Session,并重定向到index Action。
由于上面的login方法定义中调用了User模型中的try_to_login方法,因而,我们需要在user.rb模型文件中定义该方法。代码片段如下:
def try_to_login |
# 定义为私有方法 |
定义了该Filter方法之后,将该方法定义成控制器中的Before Filter,Filter将会默认拦截控制器中所有的Action,包括拦截注册、登录和处理登录的Action,这会导致用户无法正常地注册和登录系统。因此,需要使用一个except选项来指定不被拦截的Action。代码片段如下:
|
上面的代码将authorize方法定义成一个Before Filter,并通过except选项来指定该Filter不会拦截login,register和check_name这三个Action。
另外,我们希望将该Web应用的首页设置为登录页面,这在Rails中很容易做到。只需先将firstApp应用的public路径下的index.html文件删除,然后在该应用的config路径下的routes.rb文件中添加下面的代码:
map.connect '', :controller => "user", :action=>"login" |
上面的代码是自定义用户请求的路由方式。
注意 在routes.rb文件中,有两条Rails默认的路由规则。因为Rails将用户请求映射到应用程序中时,是按照routes.rb文件中的路由规则从上往下依次匹配的,因此,上面的代码必须放在默认的路由规则上面。
在浏览器的地址栏中输入http://localhost:3000,将会打开登录页面。如果输入的用户名和密码不正确,提交后系统仍返回登录页面,并在页面中显示错误提示信息。在浏览器中看到的效果如图2.8所示。
| 回书目 上一节 下一节 |
|
· 08年3月各大网上书店及.. · 网络工程师模拟测试获.. · 全国计算机软考考试指.. · 3月24日WCF聊天活动 积.. · 全国计算机等级考试四.. · 软件项目估计:第2版 |
· 系统分析师基础知识自.. · 构建可扩展的Web站点的.. · 2008年全国计算机等级.. · 网络数据安全与保密自.. · 博客园开发者征途:.NE.. · ASP.NET 2.0 WEB开发入.. |
|
||||
| · 2008年春季英特尔信息.. · 技术人求职简历完备手册 · 国际文档格式标准开战 · WCF开发基础 · Visual Studio 2005开.. · Linux——从菜鸟到高手 · 如何优化IT 控制能耗 · SQL Server入门到精通 |
· SQL Server 2008/2005.. · 贝恩资本携手华为22亿.. · ARP攻击防范与解决方案 · 初探敏捷开发 · 体验Visual Studio 200.. · SOA 面向服务架构 · CISSP认证成长之路 · 隐私保护技术探讨 |
|||
|
||||
| · iSCSI应用与发展 · SQL Server 2008/2005.. · SOA 面向服务架构 · SQL Server 2008/2005.. · iSCSI应用与发展 · RAID——磁盘阵列基础 · 中间件应用技术专题 · SQL Server入门到精通 |
· 病毒查杀专题 · 国际文档格式标准开战 · Linux防火墙 · 打造安全服务器 · Sniffer安全技术从入门.. · SOA 面向服务架构 · ADSL应用面面俱到 · 入侵防护系统(IPS)初探 |
|||
|
||||
| · iSCSI应用与发展 · 中间件应用技术专题 · SQL Server入门到精通 · SQL Server 2008/2005.. · SOA 面向服务架构 · iSCSI应用与发展 · RAID——磁盘阵列基础 · 身份认证技术 |
· 病毒查杀专题 · 清除流氓软件——51CTO.. · Sniffer安全技术从入门.. · SOA 面向服务架构 · 了解统一威胁管理(UTM).. · ADSL应用面面俱到 · ADSL应用面面俱到 · 反垃圾邮件技术应用 |
|||