- LoginView中:用戶登錄就對應(yīng)用戶生成token存入對應(yīng)關(guān)系表
user = User.objects.filter(user=user,pwd=pwd).first() # 看看有沒有此用戶 import uuid # 此模塊用來生成隨機(jī)字符串 random_str= uuid.uuid4() if user: # 是更新還是創(chuàng)建取決于user有沒有,如果有就更新,沒有就創(chuàng)建 UserToken.objects.update_or_create(user=user,defaults={'token':random_str}) response['user'] = user.user # 將用戶名返回浸颓,可能有用 response['token'] = random_str return Response(response)
- 自定義認(rèn)證類:根據(jù)用戶token表查看是否通過認(rèn)證
from rest_framework.exceptions import AuthenticationFailed from app01.models import UserToken class UserAuth(): # 【認(rèn)證第一步】 def authenticate_header(self, request): # 這個方法必須有 pass def authenticate(self, request): token = request.query_params.get('token') usertoken = UserToken.objects.filter(token=token).first() # token對象 if usertoken: # 如果用戶登錄了 return usertoken.user, usertoken.token # 此句話賦值給self.user,也就是request.user # 通過token值,找到user對象,并賦值給request。 # 因?yàn)檫@只是訪問的第一步涂籽,第二部還要根據(jù)用戶的身份進(jìn)行不同的展示。 # 而第二步是走到第一步的畢竟之路砸抛,所以想讓第二步有user對象评雌,可以通過第一步完成之后把user對象賦值給request # 當(dāng)然還可以自己通過token值查找用戶树枫,相對來說會比較麻煩。 else: # 用戶沒登錄就得拋錯 raise AuthenticationFailed('認(rèn)證失斄尽团赏!') # 這就限制了用戶只有登錄之后才能訪問
- 用的時候:
from app01.authentication_classes import UserAuth class BookView(APIView): authentication_classes = [UserAuth] # 【認(rèn)證第二步】 def post(self, request): pass def get(self, request): pass
- 登錄認(rèn)證流程:
- 用戶輸入 賬號(唯一) 和 密碼 之后,走login函數(shù)耐薯,函數(shù)去數(shù)據(jù)庫查詢,如果有查詢結(jié)果丝里,證明存在曲初,就隨機(jī)生成一個 uuid4() 的字符串,存進(jìn)與之一一對應(yīng)的 usersession 表中杯聚。并且將這個字符串返回給前端臼婆。
- 前端再次訪問時帶著字符串訪問。后端進(jìn)行驗(yàn)證幌绍。
- 驗(yàn)證的時候通過 usersession 驗(yàn)證颁褂,如果有就通過,正常訪問傀广,如果沒有就拒絕訪問颁独。
-
自定義認(rèn)證類流程:
- 定義的時候就是自定義一個類
class UserAuth(BaseAuthentication)
, - 這個類繼承
BaseAuthentication
伪冰, - 定義一個
authenticate
方法誓酒, - 進(jìn)行認(rèn)證,如果認(rèn)證通過就可以
返回兩個值
贮聂, - 認(rèn)證不通過靠柑,就拋一個
AuthenticationFailed
錯誤, - 使用時就在視圖函數(shù)中指定
authentication_classes= [UserAuth]
- 定義的時候就是自定義一個類
DRF之自定義認(rèn)證類
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門扒磁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來庆揪,“玉大人,你說我怎么就攤上這事妨托「组唬” “怎么了吝羞?”我有些...
- 文/不壞的土叔 我叫張陵,是天一觀的道長内颗。 經(jīng)常有香客問我钧排,道長,這世上最難降的妖魔是什么均澳? 我笑而不...
- 正文 為了忘掉前任恨溜,我火速辦了婚禮,結(jié)果婚禮上找前,老公的妹妹穿的比我還像新娘糟袁。我一直安慰自己,他們只是感情好躺盛,可當(dāng)我...
- 文/花漫 我一把揭開白布项戴。 她就那樣靜靜地躺著,像睡著了一般槽惫。 火紅的嫁衣襯著肌膚如雪周叮。 梳的紋絲不亂的頭發(fā)上,一...
- 文/蒼蘭香墨 我猛地睜開眼敬扛,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了朝抖?” 一聲冷哼從身側(cè)響起啥箭,我...
- 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎治宣,沒想到半個月后急侥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡侮邀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年坏怪,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绊茧。...
- 正文 年R本政府宣布,位于F島的核電站侣夷,受9級特大地震影響横朋,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜百拓,卻給世界環(huán)境...
- 文/蒙蒙 一琴锭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧耐版,春花似錦祠够、人聲如沸。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽止剖。三九已至腺阳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間穿香,已是汗流浹背亭引。 一陣腳步聲響...
- 正文 我出身青樓,卻偏偏與公主長得像洒宝,于是被迫代替她去往敵國和親购公。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(nèi)容
- 忙了一周了,也該抽點(diǎn)時間寫點(diǎn)兒東西. 話不多說,書接上文(上文在哪兒?),開發(fā)項(xiàng)目中經(jīng)常用到彈窗,比如,用戶要退出...
- 世間最好的愛情是什么樣子? 舉案齊眉乏盐,心心相印 世間最好的友誼是什么樣子佳窑? 知心密友,詩酒猖狂 世間最好的生活是什...
- 相約起五更法竞, 結(jié)伴向山行耙厚。 霧淡青峰遠(yuǎn)强挫, 巒高雪晶瑩。 雨來石亂走薛躬, 風(fēng)過木齊鳴俯渤。 馬快氈房近, 茶香碗莫停型宝。