rest_framework 用戶認(rèn)證

分為兩步實現(xiàn)

  • 第一步嗓违,創(chuàng)建自己的認(rèn)證類Authentication,
    需要實現(xiàn)兩個方法:
from rest_framework import exceptions
from rest_framework import authentication

class MyAuthentication(authentication.BaseAuthentication):
    """創(chuàng)建自己的`認(rèn)證類`"""

    def authenticate(self,request):
        """返回結(jié)果只能有`三種`
            1.認(rèn)證失敗,拋異常 -> raise exceptions.AuthenticationFailed
            2.認(rèn)證成功,返回元組(`用戶信息`缨硝,`token令牌信息`),
                rest framework 會將這兩個信息賦值給`request`對象狐史,以便下一步使用。
                用戶信息只能有一個典徘,一旦認(rèn)證成功蟀苛,則不再對下一個`認(rèn)證對象`進(jìn)行認(rèn)證
            3.既不拋異常,也沒有返回值(或者返回`None`)逮诲,則繼續(xù)下一個`認(rèn)證`

             如果最終都沒有返回元組(`用戶信息`帜平,`token令牌信息`),則使用配置的默認(rèn)用戶信息:`匿名用戶`
        """
        pass

    def authenticate_header(self,requet):
        pass
  • 第二步,將認(rèn)證類進(jìn)行配置梅鹦,這里又分兩種方式
    • 1)在MyView視圖類中裆甩,將認(rèn)證類Authentication,添加進(jìn)authentication_classes列表中,表示該認(rèn)證類只對當(dāng)前視圖類起作用齐唆。
class MyView(APIView):
    authentication_classes = ['MyAuthentication',......]
    
    def get(request, *args, **kwargs):
        pass
  • 2)在Djangosettings.py 進(jìn)行全局配置
# settings.py

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': ['api.utils.auth.Authtication',]
}

這里的局部配置優(yōu)先于全局配置嗤栓,例如:

class MyView(APIView):
    authentication_classes = [ ] # 覆蓋 APIView 的 authentication_classes 屬性

則當(dāng)前視圖類可繞過全局認(rèn)證


5.用戶認(rèn)證的源碼流程

1.MyView.as_view() 這里調(diào)用Djangoas_view()生成view,并對view進(jìn)行csrf豁免箍邮。

2.dispatch(),rest framework重寫了dispatch()茉帅;
1)執(zhí)行initialize_request(request, *args, **kwargs)request進(jìn)行包裝,并執(zhí)行
get_authenticators(),獲取認(rèn)證對象
2)執(zhí)行 initial(request, *args, **kwargs),在initial中進(jìn)行認(rèn)證perform_authentication(request)

6. REST用戶認(rèn)證配置匿名用戶以及token

# settings.py

REST_FRAMEWORK = {
    # 這里 UNAUTHENTICATED_USER锭弊、UNAUTHENTICATED_TOKEN 應(yīng)是函數(shù)對象
    # 默認(rèn)的匿名用戶堪澎,token為 UNAUTHENTICATED_USER(),UNAUTHENTICATED_TOKEN()
    # None() 返回值仍然為None
    'UNAUTHENTICATED_USER': None,
    'UNAUTHENTICATED_TOKEN': None,
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末味滞,一起剝皮案震驚了整個濱河市樱蛤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌剑鞍,老刑警劉巖昨凡,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蚁署,居然都是意外死亡便脊,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進(jìn)店門光戈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來就轧,“玉大人证杭,你說我怎么就攤上這事《视” “怎么了解愤?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長乎莉。 經(jīng)常有香客問我送讲,道長,這世上最難降的妖魔是什么惋啃? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任哼鬓,我火速辦了婚禮,結(jié)果婚禮上边灭,老公的妹妹穿的比我還像新娘异希。我一直安慰自己,他們只是感情好绒瘦,可當(dāng)我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布称簿。 她就那樣靜靜地躺著,像睡著了一般惰帽。 火紅的嫁衣襯著肌膚如雪憨降。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天该酗,我揣著相機與錄音授药,去河邊找鬼。 笑死呜魄,一個胖子當(dāng)著我的面吹牛悔叽,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播爵嗅,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼骄蝇,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了操骡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤赚窃,失蹤者是張志新(化名)和其女友劉穎册招,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體勒极,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡是掰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了辱匿。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片键痛。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡炫彩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出絮短,到底是詐尸還是另有隱情江兢,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布丁频,位于F島的核電站杉允,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏席里。R本人自食惡果不足惜叔磷,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望奖磁。 院中可真熱鬧改基,春花似錦、人聲如沸咖为。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽案疲。三九已至封恰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間褐啡,已是汗流浹背诺舔。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留备畦,地道東北人低飒。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像懂盐,于是被迫代替她去往敵國和親褥赊。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容