Django實現單使用者登入

2021-09-27 06:32:56 字數 2281 閱讀 6582

最近由於要畢業了寫**做畢設,然後還在實習發現已經好久都沒有寫部落格了。今天由於工作需求,需要用django實現單使用者登入。大概意思就是跟qq一樣的效果,每個賬號只能乙個地方登入使用,限制賬號的登入次數。由於用的是django自帶的認證,然後校驗使用者是否登入其實就是通過session實現的。下面就簡單分享一下怎麼實現的吧。

在做使用者登入認證的時候django自帶的有is_authenticated()方法。下面就是乙個簡單的認證過程。

if request.user.is_authenticated():  #

判斷是否登入

return redirect('

/index/')

else

return redirect('

/accounts/login/

')

現在步入正題,講一下具體實現流程吧。我們在做使用者登入的時候一般會擴充套件django自帶的user表,當然方法一般有幾種,你可以繼承abstractuser表然後寫入自己想要的字段,還可以單獨建個表然後跟user表建立一對一的關係,具體的實現這裡就不多加描述了。

我採用的是單獨建立乙個使用者資訊表於user表進行一對一關聯,在使用者表裡面增加乙個session_key欄位用於存最新使用者登入的session_key。每次我們登入就取出這個值進行判斷,如果裡面沒有值,表示使用者沒有登入就可以走正常的登入流程。如果裡面有值,說明代表的是前面使用者登入留下的session_key,我們就先在session表裡面刪除掉這個記錄,讓上乙個登入使用者的session失效,然後登入的時候再把最新登入生成的session_key更新到使用者資訊表裡面,用作下乙個校驗。這樣就能簡單快捷的實現django的單使用者登入了。

核心**截圖:

具體實現**如下:

from django.shortcuts import

redirect

from django.views.decorators.cache import

never_cache

from django.views.decorators.csrf import

csrf_exempt

from django.contrib.auth import

login as auth_login, authenticate

使用者資訊表

@csrf_exempt

@never_cache

deflogin(request):

ifrequest.user.is_authenticated():

return redirect('

/index/')

else

:

if request.method == "

post":

username = request.post.get("

username")

password = request.post.get("

password")

authenticated_user = authenticate(username=username, password=password)

ifauthenticated_user:

#單使用者登入

user_obj = ucenter.objects.filter(userid=authenticated_user) #

找到登入的user物件

is_session_key = user_obj.first().session_key #

獲取登入物件的session_key

if is_session_key: #

使用者已登入

request.session.delete(is_session_key) #

刪除登入前面登入使用者的session_key

auth_login(request, authenticated_user) #

使用者資訊存入session

user_obj.update(session_key=request.session.session_key) #

更新新登入user的session_key

return redirect('

/index/')

else

:

return redirect('

/accounts/login/

')

單使用者登入

目的 乙個賬號只能在乙個地方登入,不能同時登入 有兩種處理邏輯 1.a登入後,b不能使用同樣的賬戶進行登入 後台邏輯定義 使用者資料表多新增乙個字段,預設為false,每次使用者發起登入,檢測是否為false,是則可以登入,並設定為true,如果為true,則提示使用者已登入,請換個賬號 2.a登入...

shiro單使用者登入實現

1.需求 賬號同一時間只能在一處登入 將之前的使用者踢出 shiro實現策略 獲取當前使用者session列表,直接刪除該使用者的其他登入資訊import org.apache.shiro.session.mgt.eis.sessiondao autowired private sessiondao...

Shiro單使用者登入

有這樣乙個需求,兩地同時使用乙個賬號登入,需要將先登入的使用者的session刪除 使用者登入時判斷是否之前改賬號在別的地方登入 若沒有登入,直接進行登入 若有登入,則找到登入的session,給該session做個標記 當之前登入的使用者再次進行操作時,判斷其是否有標記,有則刪除其session,...