标题 | 用rails中的before_action简化身份验证 |
范文 | 刘华煜 摘要:网站的身份验证代码很多时候都是重复的,并且和功能代码混杂在一起。用before_action则可以简化代码。 关键词:rails; before_action 中图分类号:TP391.1 文献标识码:A 文章编号:1009-3044(2017)31-0017-01 Simplify Authentication with before_action in Rails LIU Hua-yu (College of Mathematics Science,Luoyang Normal University, Luoyang 471934, China) Abstract: Authentication code of web site is often repeated, and is mixed with the function code. Using before_action can simplify code. Key words: rails; before_action 绝大多数网站都需要身份验证,以防无意或恶意的破坏。很多网页都会用到身份验证的代码,而这些代码绝大多数情况下极其相似或甚至就是一樣。 Rails提供了before_action方法,可以在活动执行前执行指定代码。这样就可以在活动执行前进行身份验证,从而使活动的代码不至于因为混入了身份验证的代码而显得杂乱。 1 网站身份验证的一般流程 一般的网站登录后都要把用户id作为session保存起来,以供以后身份验证使用。 在需要身份验证的时候,以编辑文章为例,就把这个session拿出来,看看是不是文章作者本人或管理员,如果不是,则不允许编辑。 身份验证的一种特殊情况是管理员行为,管理员具有最高权限,如可以给文章置顶等。 2 相关代码 1) 登录后将用户id存储在session中 session['user']=id 2) 在编辑文章的时候进行身份验证 def edit if session['user']!=author && session['user']!= 'admin' redirect_to '/login' end … end 如果身份不符,则重定向到登录页面。 同样,在删除文章的时候也需要类似的代码,这样就出现了重复代码,并且身份验证代码和完成编辑/删除功能的代码混杂在一起。 3 用before_action重构代码 1) 先写一个通用方法用于验证身份 def check_user if session['user']!=author && session['user']!= 'admin' redirect_to '/login' end end 2) 在控制器最开始部分使用before_action before_action :check_user, :only => [:edit,:destroy] 意思是在执行edit和destroy活动前执行check_user方法。 这样的话edit和destroy活动中就可以去除重复的身份验证代码,并且显得很干净。 4 验证管理员 验证是否是管理员的方法如下: def check_admin if session['user']!= 'admin' redirect_to '/login' end end 此时我们发现这个方法和check_user很像,所以二者可以合并: def check_user(u) unless u.include? session['user'] redirect_to '/login'end end 验证是否是管理员用check_user(['admin']),验证是否是作者或管理员用check_user(['admin',author])。 由于before_action :check_user, :only => [:edit,:destroy]只能指定方法名,无法指定参数,所以此时应该用before_action的块参数方式: before_action :only => [:edit,:destroy] do check_user(['admin',author]) end 意思是编辑和删除需要验证是否是作者或管理员 而置顶/取消置顶等则只需验证是否是管理员: before_action :only => [:toup,:untoup] do check_user(['admin']) end 5 结束语 灵活的应用before_action,可以在执行活动前执行身份验证,从而让代码变得更加简洁。 参考文献: [1] Jeffrey Allan Hardy. Rails开发者指南[M]. 北京: 机械工业出版社, 2009. [2] Michael Hartl. Ruby on Rails教程[M]. 北京: 人民邮电出版社, 2017. |
随便看 |
|
科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。