RailsCasts中文版,#21 Super Simple Authentication 一个简单的认证实现
2012-12-10 22:28
225 查看
在上一篇中,演示了如何根据当前登陆的用户是否具有管理员权限来显示或隐藏指向文章管理的链接。实现方式是通过在
关于
登陆系统开发完毕后,在
不过我们的这个站点本来就不太复杂,也用不上那么完善的权限管理机制。其实只要能区分出是普通用户还是管理员用户就足够了,所以不打算加入权限管理模块。最最简单的实现是检查请求过来的IP是不是服务器本机IP。
很明显这个实现方案太过简陋了,管理工作只能在服务器本机完成。我想还是做一张简单的登陆页面,接受一个密码作为参数,如果密码正确就显示管理员链接。
简单的登陆页面。
创建一个名为
还有登陆页面,位于
页面提交请求后会调用
功能一切正常,并没有太过复杂的用户认证系统支持,但对我们来说是足够用了。
作者授权:Your welcome to post the translated text on your blog as well if the episode is free(not
Pro). I just ask that you post a link back to the original episode on railscasts.com.
原文链接:http://railscasts.com/episodes/21-super-simple-authentication
ApplicationController中增加一个
admin?方法,如果方法返回true则显示,否则隐藏这些链接。接下来是如何实现这个方法的逻辑,应该是根据登陆用户的情况决定是否显示。
有多种实现方法
可以通过多种方式来实现一个登陆系统。可以从模型到界面自己开发一套,当然可以借助于一个名为acts_as_authenticated1的权限管理插件。它的RESTFUL版本叫做
restful_authentication。安装好之后,可以用如下方法生成代码:
$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。
def admin request.remote_ip == "127.0.0.1" end
很明显这个实现方案太过简陋了,管理工作只能在服务器本机完成。我想还是做一张简单的登陆页面,接受一个密码作为参数,如果密码正确就显示管理员链接。
简单的登陆页面。
创建一个名为
SessionsController的控制器类,代码如下:
class 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 end end
还有登陆页面,位于
/views/sessions目录中。
<% 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作者授权:Your welcome to post the translated text on your blog as well if the episode is free(not
Pro). I just ask that you post a link back to the original episode on railscasts.com.
原文链接:http://railscasts.com/episodes/21-super-simple-authentication
相关文章推荐
- 实现一个简单的Form授权 How to: Implement Simple Forms Authentication
- 使用装饰器实现一个简单的Tornado用户认证Demo(Basic authentication on Tornado with a decorator)
- 实现一个快速简单的SimpleListDialog<T>
- 关于单点认证的一个简单实现(结合Form认证)!
- [shiro学习笔记]第二节 shiro与web融合实现一个简单的授权认证
- [shiro学习笔记]第二节 shiro与web融合实现一个简单的授权认证
- Simple Authentication and Security Layer 简单的认证及加密层
- [shiro学习笔记]第二节 shiro与web融合实现一个简单的授权认证
- cocos2d-x入门(2)-实现一个简单的游戏SimpleGame
- 一个简单粗暴的人脸认证标注工具的实现
- 实现一个简单的token认证
- Quartz SimpleThreadPool的源码,一个简单的线程池的实现原理
- [shiro学习笔记]第二节 shiro与web融合实现一个简单的授权认证
- 怎样实现简单Forms验证(登录,注销)How to: Implement Simple Forms Authentication
- 一个简单的Java对象池实现——可用来解决SimpleDateFormat的线程安全问题
- javascript实现一个简单的二级菜单
- Android UI开发: 横向ListView(HorizontalListView)及一个简单相册的完整实现 (附源码下载)
- 采用KNN算法实现一个简单的推荐系统
- 用go和zk实现一个简单的分布式server
- 一步一步教你使用CGI实现一个简单的后门