国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

django authenticate--用戶身份認證

這篇具有很好參考價值的文章主要介紹了django authenticate--用戶身份認證。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

authenticate
Django的contrib.auth模塊中的authenticate()函數(shù)用于對用戶的憑據(jù)進行身份驗證,與已配置的身份驗證后端進行比較。

當用戶嘗試登錄時,authenticate()函數(shù)將使用用戶的憑據(jù)(即用戶名和密碼)作為參數(shù)進行調(diào)用,該函數(shù)然后檢查可用的身份驗證后端以驗證憑據(jù),這些后端在項目的settings.py文件中定義,如果憑據(jù)有效,則authenticate()函數(shù)返回已認證的用戶對象;否則,它返回None。
在成功身份驗證后,可以使用Django的login()函數(shù)登錄用戶。

認證后端
1.AUTHENTICATION_BACKENDS是Django設(shè)置中的一個參數(shù),它定義了用于身份驗證的后端認證方式。這個參數(shù)是一個字符串列表,包含Django認證系統(tǒng)使用的認證后端類的全名。

2.當用戶嘗試進行身份驗證時,Django將按照AUTHENTICATION_BACKENDS中定義的順序,嘗試每個后端認證方式,直到找到一個認證方式成功為止。如果所有后端認證方式都失敗,則身份驗證失敗。

3.默認情況下,Django使用ModelBackend作為身份驗證后端,它基于Django中的用戶模型進行身份驗證。除此之外,Django還提供了其他的身份驗證后端,如LDAPBackend、RemoteUserBackend等,也可以自定義身份驗證后端。

4.通過配置AUTHENTICATION_BACKENDS參數(shù),可以對身份驗證后端進行定制,以滿足具體項目的需求。例如,如果你的項目需要使用LDAP進行用戶身份驗證,則可以添加LDAPBackend到AUTHENTICATION_BACKENDS列表中,以便Django使用LDAPBackend進行身份驗證。

from django.contrib.auth import authenticate
from django.contrib.auth import login as user_login
def my_login(request):
    """
    登錄視圖
    :param request:
    :return:
    """
    if request.method == "POST":
        login_form = users_form.UserForm(request.POST)
        if login_form.is_valid():
            username = login_form.cleaned_data['username']
            password = login_form.cleaned_data['password']
            myuser = authenticate(username=username, password=password)
            if myuser is not None:
                user_login(request, myuser)

這段代碼使用Django的contrib.auth模塊來進行用戶身份驗證和登錄。
首先,它調(diào)用authenticate()函數(shù)驗證用戶的憑據(jù),如果憑據(jù)有效,則authenticate()函數(shù)將返回已認證的用戶對象,并將其賦給myuser變量。如果憑據(jù)無效,則authenticate()函數(shù)將返回None。
接著,代碼檢查myuser變量是否為None。如果myuser不為None,則說明憑據(jù)有效,并且代碼將調(diào)用user_login()函數(shù)來將該用戶登錄到當前會話中。user_login()函數(shù)需要傳遞一個request對象和已認證的用戶對象。登錄成功后,用戶可以訪問需要認證的頁面和視圖。
如果myuser為None,則說明憑據(jù)無效,用戶無法登錄。

myuser 和 request.user 是兩個不同的對象,其區(qū)別在于:
1.myuser 表示通過用戶名和密碼認證成功后得到的用戶對象, 是通過表單驗證之后從數(shù)據(jù)庫中查詢出來的用戶對象,即 authenticate 方法返回的對象。主要用來檢查用戶輸入的用戶名和密碼是否正確,并在認證成功后設(shè)置一些 session 變量。
2.request.user 表示當前請求的用戶對象,是通過 Django 的認證系統(tǒng)得到的用戶對象,包括通過認證的用戶和未認證的用戶。如果用戶已通過認證,則該對象是一個 User 實例,否則是一個 AnonymousUser 實例。 主要用來獲取當前認證的用戶信息,例如用戶的用戶名、郵箱等。這些信息通常用來顯示在頁面上,或者用來判斷當前用戶是否有權(quán)限進行某些操作。

因此,在這個方法中,myuser 和 request.user 作用是相同的,都是用來判斷用戶是否已通過認證,但是可能是不同的對象,因為 myuser 只在用戶認證成功后才會有值,而 request.user 則是在每個請求中都會有值,不論用戶是否通過認證。同時,在這個方法中,myuser 和 request.user 都可以用來檢查用戶是否已通過認證,但是只有 request.user 才可以用來獲取當前認證的用戶信息。

authenticate函數(shù)如下:


@sensitive_variables("credentials")
def authenticate(request=None, **credentials):
    """
    If the given credentials are valid, return a User object.
    """
    for backend, backend_path in _get_backends(return_tuples=True):
        backend_signature = inspect.signature(backend.authenticate)
        try:
            backend_signature.bind(request, **credentials)
        except TypeError:
            # This backend doesn't accept these credentials as arguments. Try
            # the next one.
            continue
        try:
            user = backend.authenticate(request, **credentials)
        except PermissionDenied:
            # This backend says to stop in our tracks - this user should not be
            # allowed in at all.
            break
        if user is None:
            continue
        # Annotate the user object with the path of the backend.
        user.backend = backend_path
        return user

_get_backends會從settings.py中讀取AUTHENTICATION_BACKENDS定義的后端路徑:

def _get_backends(return_tuples=False):
    backends = []
    for backend_path in settings.AUTHENTICATION_BACKENDS:
        backend = load_backend(backend_path)
        backends.append((backend, backend_path) if return_tuples else backend)
    if not backends:
        raise ImproperlyConfigured(
            "No authentication backends have been defined. Does "
            "AUTHENTICATION_BACKENDS contain anything?"
        )
    return backends
AUTHENTICATION_BACKENDS = [
    'django.contrib.auth.backends.ModelBackend',
    'backends.user_backend.UserBackend'
]

AUTHENTICATION_BACKENDS列表中包含了兩個認證后端,分別是ModelBackend和UserBackend。Django將按照列表中的順序依次嘗試這兩個認證后端,直到找到一個成功為止。

UserBackend需要繼承BaseBackend并實現(xiàn)一個authenticate函數(shù):文章來源地址http://www.zghlxwxcb.cn/news/detail-449322.html

from django.contrib.auth.backends import BaseBackend
from users.models import MyUser


class UserBackend(BaseBackend):
    def authenticate(self, request, username=None, password=None, **kwargs):
        try:
            myuser = MyUser.objects.get(name=username)
            if myuser.check_password(password):
                return myuser
        except MyUser.DoesNotExist as e:
            print("user no exist", e)
            return None

    def get_user(self, user_id):
        try:
            return MyUser.objects.get(pk=user_id)
        except MyUser.DoesNotExist:
            return None

到了這里,關(guān)于django authenticate--用戶身份認證的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 計算機網(wǎng)絡(luò)的故事——確認訪問用戶身份的認證

    計算機網(wǎng)絡(luò)的故事——確認訪問用戶身份的認證

    HTTP使用的認證方式:BASIC認證(基本認證)、DIGEST(摘要認證)、SSL客戶端認證、FormBase認證(基于表單認證)。 基于表單的認證:涉及到session管理以及cookie的應用。

    2024年02月09日
    瀏覽(20)
  • 3-2. SpringBoot項目集成【用戶身份認證】實戰(zhàn) 【實戰(zhàn)核心篇】基于JWT生成和校驗Token

    3-2. SpringBoot項目集成【用戶身份認證】實戰(zhàn) 【實戰(zhàn)核心篇】基于JWT生成和校驗Token

    書接上文 技術(shù)選型篇,我們做了【用戶身份認證】的技術(shù)選型說明,對基于 Session、Token、JWT 的方案進行了詳細的對比分析,詳細說明了它們都是什么和各自的優(yōu)缺點!這些是實戰(zhàn)的基礎(chǔ),還沒看過的同學,建議先看上文。最終采用的是目前流行的 基于JWT的Token用戶身份認證

    2023年04月08日
    瀏覽(27)
  • 3-1. SpringBoot項目集成【用戶身份認證】實戰(zhàn) 【技術(shù)選型篇】基于Session、Token、JWT怎么選?

    3-1. SpringBoot項目集成【用戶身份認證】實戰(zhàn) 【技術(shù)選型篇】基于Session、Token、JWT怎么選?

    通過第二章2-2. SpringBoot API開發(fā)詳解 --SpringMVC注解+封裝結(jié)果+支持跨域+打包,我們實現(xiàn)了基于SpringBoot項目的 API接口開發(fā) ,并實現(xiàn) API結(jié)果統(tǒng)一封裝、支持跨域請求 等等功能,接下來開始第三章,主要做用戶身份認證,主要實現(xiàn)一套 統(tǒng)一鑒權(quán)的用戶身份認證的機制 。 我已經(jīng)提

    2024年01月22日
    瀏覽(26)
  • 3-3. SpringBoot項目集成【用戶身份認證】實戰(zhàn) 【全流程篇】基于JWT+雙重檢查的登錄+登出+攔截器

    書接上文 實戰(zhàn)核心篇,我們已經(jīng) 把JWT的核心代碼實現(xiàn)了! 文中不止是代碼實現(xiàn),更是使用到了設(shè)計原則,提升大家的內(nèi)功心法。并且拋轉(zhuǎn)引玉的實現(xiàn)了RSA和HMAC兩種算法,還沒看過的同學,建議先看上文。所以對于 基于JWT的Token用戶身份認證機制 來說,剩下的就是與接口結(jié)

    2023年04月16日
    瀏覽(18)
  • 統(tǒng)一身份認證,構(gòu)建數(shù)字時代的安全壁壘——統(tǒng)一身份認證介紹、原理和實現(xiàn)方法

    隨著數(shù)字化時代的來臨,個人和機構(gòu)在互聯(lián)網(wǎng)上的活動越來越頻繁,對于身份認證的需求也愈發(fā)迫切。為了有效應對身份欺詐、數(shù)據(jù)泄露等問題,統(tǒng)一身份認證(Unified Identity Authentication)應運而生。 在本文博主將介紹統(tǒng)一身份認證的概念、原理以及其具體的實現(xiàn)方案。 統(tǒng)一

    2024年02月03日
    瀏覽(29)
  • 身份認證——802.1x認證和MAC認證講解

    身份認證——802.1x認證和MAC認證講解

    目錄 802.1x基礎(chǔ) EAP(Extensible Authentication Protocol)可擴展認證協(xié)議 EAPoL(EAP over LAN)局域網(wǎng)可擴展認證協(xié)議 802.1x體系架構(gòu) 受控端口的受控方式 802.1x認證 802.1x認證觸發(fā)方式 客戶端退出認證 802.1x認證方式 MAC認證 802.1x認證又稱為EAPOE(Extensible Authentication Protocol Over Ethernet)認證

    2024年02月03日
    瀏覽(48)
  • 【認證繞過】NACOS身份認證繞過漏洞分析

    前言 工作中遇到一個nacos服務(wù)認證繞過的問題,在此總結(jié)一下漏洞原因。 官方文檔描述: Nacos 致力于幫助您發(fā)現(xiàn)、配置和管理微服務(wù)。Nacos 提供了一組簡單易用的特性集,幫助您快速實現(xiàn)動態(tài)服務(wù)發(fā)現(xiàn)、服務(wù)配置、服務(wù)元數(shù)據(jù)及流量管理。 Nacos 幫助您更敏捷和容易地構(gòu)建、

    2023年04月13日
    瀏覽(53)
  • NACOS身份認證繞過

    NACOS身份認證繞過

    一、漏洞描述 Nacos是Alibaba的一個動態(tài)服務(wù)發(fā)現(xiàn)、配置和服務(wù)管理平臺。攻擊者通過添加Nacos-Server的User-Agent頭部將可繞過(nacos.core.auth.enabled=true)鑒權(quán)認證,從而進行API操作。 二、漏洞利用 訪問 http://xxxxx/nacos/v1/auth/users?username=testpassword=test ,并使用burpsuite進行抓包,將方法

    2024年02月16日
    瀏覽(27)
  • Nacos身份認證漏洞

    Nacos身份認證漏洞

    公司Nacos版本有用的2.0.1和2.0.3的都復現(xiàn)了身份認證的漏洞,無需認證身份就可以查看用戶列表以及注冊新用戶,并且注冊上來的新用戶可以查看所有public命名空間下的配置資源! 1、查看用戶列表 URL: http://ip:8848/nacos/v1/auth/users?pageNo=1pageSize=1 方法類型:GET 返回結(jié)果: 如圖示

    2023年04月10日
    瀏覽(25)
  • Nodejs七、身份認證

    Nodejs七、身份認證

    1、Web 開發(fā)模式 (1)目前主流的 Web 開發(fā)模式 基于 服務(wù)端渲染 的傳統(tǒng) Web 開發(fā)模式 基于 前后端分離 的新型 Web 開發(fā)模式 (2)服務(wù)端渲染的 Web 開發(fā)模式 服務(wù)器發(fā)送給客戶端的 HTML 頁面,是在服務(wù)器通過字符串的拼接,動態(tài)生成的。 客戶端不需要使用 Ajax 這樣的技術(shù)額外請

    2024年02月09日
    瀏覽(56)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包