亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        用rails中的before_action簡化身份驗證

        2017-12-11 08:55:34劉華煜
        電腦知識與技術(shù) 2017年31期

        劉華煜

        摘要:網(wǎng)站的身份驗證代碼很多時候都是重復的,并且和功能代碼混雜在一起。用before_action則可以簡化代碼。

        關(guān)鍵詞: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

        絕大多數(shù)網(wǎng)站都需要身份驗證,以防無意或惡意的破壞。很多網(wǎng)頁都會用到身份驗證的代碼,而這些代碼絕大多數(shù)情況下極其相似或甚至就是一樣。

        Rails提供了before_action方法,可以在活動執(zhí)行前執(zhí)行指定代碼。這樣就可以在活動執(zhí)行前進行身份驗證,從而使活動的代碼不至于因為混入了身份驗證的代碼而顯得雜亂。

        1 網(wǎng)站身份驗證的一般流程

        一般的網(wǎng)站登錄后都要把用戶id作為session保存起來,以供以后身份驗證使用。

        在需要身份驗證的時候,以編輯文章為例,就把這個session拿出來,看看是不是文章作者本人或管理員,如果不是,則不允許編輯。

        身份驗證的一種特殊情況是管理員行為,管理員具有最高權(quán)限,如可以給文章置頂?shù)取?/p>

        2 相關(guān)代碼

        1) 登錄后將用戶id存儲在session中

        session['user']=id

        2) 在編輯文章的時候進行身份驗證

        def edit

        if session['user']!=author && session['user']!= 'admin'

        redirect_to '/login'

        end

        end

        如果身份不符,則重定向到登錄頁面。

        同樣,在刪除文章的時候也需要類似的代碼,這樣就出現(xiàn)了重復代碼,并且身份驗證代碼和完成編輯/刪除功能的代碼混雜在一起。

        3 用before_action重構(gòu)代碼

        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]

        意思是在執(zhí)行edit和destroy活動前執(zhí)行check_user方法。

        這樣的話edit和destroy活動中就可以去除重復的身份驗證代碼,并且顯得很干凈。

        4 驗證管理員

        驗證是否是管理員的方法如下:

        def check_admin

        if session['user']!= 'admin'

        redirect_to '/login'

        end

        end

        此時我們發(fā)現(xiàn)這個方法和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]只能指定方法名,無法指定參數(shù),所以此時應該用before_action的塊參數(shù)方式:

        before_action :only => [:edit,:destroy] do

        check_user(['admin',author])

        end

        意思是編輯和刪除需要驗證是否是作者或管理員

        而置頂/取消置頂?shù)葎t只需驗證是否是管理員:

        before_action :only => [:toup,:untoup] do

        check_user(['admin'])

        end

        5 結(jié)束語

        靈活的應用before_action,可以在執(zhí)行活動前執(zhí)行身份驗證,從而讓代碼變得更加簡潔。

        參考文獻:

        [1] Jeffrey Allan Hardy. Rails開發(fā)者指南[M]. 北京: 機械工業(yè)出版社, 2009.

        [2] Michael Hartl. Ruby on Rails教程[M]. 北京: 人民郵電出版社, 2017.

        一区二区三区日韩毛片| 亚洲 都市 校园 激情 另类| 伊人久久一区二区三区无码| 东京道一本热码加勒比小泽| 国产嫩草av一区二区三区| 亚洲成a∨人片在线观看不卡| 亚洲一区二区三区日本久久九| 国语精品视频在线观看不卡| 中文字幕午夜精品一区二区三区| 久久精品国产亚洲av麻豆色欲| 亚洲av无码一区二区二三区 | 国产精品自线在线播放| 国产精品美女主播一区二区| 无码中文字幕日韩专区| 久久婷婷香蕉热狠狠综合| 亚洲九九夜夜| 不卡免费在线亚洲av| 熟女人妇 成熟妇女系列视频| 亚洲不卡中文字幕无码| 国产对白刺激在线观看| 91亚洲国产成人精品一区.| 亚洲国产精品一区二区www| 真正免费一级毛片在线播放| 亚洲中文字幕高清视频| 久久精品国产亚洲av超清| 亚洲精品无码成人a片| 亚洲嫩模高清在线视频| 亚洲啪啪色婷婷一区二区| 久久精品国产精品亚洲| 熟妇人妻AV中文字幕老熟妇| 亚洲中文字幕高清视频| 色欲一区二区三区精品a片| 国产成人精品日本亚洲11| 国内视频一区| 极品尤物在线精品一区二区三区| 国产伦理一区二区| 无码av在线a∨天堂毛片| 一区二区三区视频偷拍| 午夜爽爽爽男女免费观看影院| 青青青国产精品一区二区| 中国老太老肥熟女视频|