RailsCasts21 Super Simple Authentication 超级简单的验证机制
来源:互联网 发布:魔法王座神器进阶数据 编辑:程序博客网 时间:2024/06/05 11:05
在上一篇中,演示了如何根据当前登陆的用户是否具有管理员权限来显示或隐藏指向文章管理的链接。实现方式是通过在ApplicationController
中增加一个admin?
方法,如果方法返回true则显示,否则隐藏这些链接。接下来是如何实现这个方法的逻辑,应该是根据登陆用户的情况决定是否显示。
有多种实现方法
可以通过多种方式来实现一个登陆系统。可以从模型到界面自己开发一套,当然可以借助于一个名为acts_as_authenticated
1的权限管理插件。它的RESTFUL版本叫做restful_authentication
。安装好之后,可以用如下方法生成代码:
terminal$script/plugin install git://github.com/technoweenie/restful-authentication.git restful_authentication$script/generate authenticated User sessions$rake db:migrate
关于restful_authentication
插件将在episode 67中进行详细介绍。
登陆系统开发完毕后,在admin?
方法中得到当前登陆的用户,判断其用户名是否在你的管理员列表中。或者给每一个用户增加一个是否是管理员这样一个属性等。
不过我们的这个站点本来就不太复杂,也用不上那么完善的权限管理机制。其实只要能区分出是普通用户还是管理员用户就足够了,所以不打算加入权限管理模块。最最简单的实现是检查请求过来的IP是不是服务器本机IP。
rubydef admin request.remote_ip == "127.0.0.1"end
很明显这个实现方案太过简陋了,管理工作只能在服务器本机完成。我想还是做一张简单的登陆页面,接受一个密码作为参数,如果密码正确就显示管理员链接。
简单的登陆页面。
创建一个名为SessionsController
的控制器类,代码如下:
rubyclass SessionsController < ApplicationController def new end def create session[:password] = params[:password] flash[:notice] = ’Successfully logged in’ redirect_to home_path end def destroy reset_session flash[:notice] = ’Successfully logged out’ redirect_to login_path endend<p>还有登陆页面,位于<code>/views/sessions</code>目录中。</p><pre name="code" class="html"> ruby<% form_tag sessions_path do %> Password: <%= password_field_tag :password %> <%= submit_tag "Login" %><% end %>
页面提交请求后会调用SessionsController
中的create
方法,保存密码至会话中,然后转向列表页面。之后admin?
方法将会话中存储的密码取出并校验,返回是否通过。
def admin? session[:password] == "secret"end
完工!
你要问了,如何将登录动作与create
方法关联,以及如何将注销动作与destory
方法关联的呢?秘密就在routes.rb
中。
map.connect 'login', :controller => 'sessions', :action => 'create'map.connect 'logout', :controller => 'sessions', :action => 'destroy'
功能一切正常,并没有太过复杂的用户认证系统支持,但对我们来说是足够用了。
注:
- http://github.com/technoweenie/restful-authentication/tree/master
- RailsCasts21 Super Simple Authentication 超级简单的验证机制
- RailsCasts中文版,#21 Super Simple Authentication 一个简单的认证实现
- JGit Authentication JGit验证机制
- Simple Authentication and Security Layer 简单的认证及加密层
- 【Hadoop】Simple Authentication
- 区域对比验证码识别,超级简单的Region对比识别验证码
- Linux的鉴别(Authentication)机制--PAM
- 超级简单的 Socket
- 超级简单的 Socket
- 超级简单的全选
- Atitit HTTP 认证机制基本验证 (Basic Authentication) 和摘要验证 (Digest Authentication)attilax总结Atitit HT
- LeetCode 313. Super Ugly Number(超级丑的数字)
- PHP实现简单的验证码功能机制
- Simple Rules/简单的规律
- 超级简单的DIV布局
- 超级简单的抽奖工具
- 超级简单的一个算法
- 超级简单的文件上传
- Log 作用
- js中操作cookie
- windows 7下的程序 请求以管理员权限运行
- 黑马程序员Android27期“屌丝”逆袭,月薪15000元
- 数据结构-1-内存映射文件原理详解
- RailsCasts21 Super Simple Authentication 超级简单的验证机制
- win7添加逻辑分区
- 黑马程序员——浅复制与深复制
- FORK()函数的理解
- C语言之数组专题:数组指针、指针数组、数组做函数参数退化、数组名、数组类型
- C++练习
- linux之sed用法
- ADSP--BF609 之 VID :pixc 和 EPPI PVP(一)
- 重要网络连接