第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

Django-使用電子郵件登錄

Django-使用電子郵件登錄

慕碼人2483693 2019-11-28 14:09:57
我希望django通過電子郵件而非用戶名對用戶進(jìn)行身份驗(yàn)證。一種方法是提供電子郵件值作為用戶名值,但我不希望那樣。原因是,我有一個(gè)url /profile/<username>/,所以我不能有一個(gè)url /profile/abcd@gmail.com/。另一個(gè)原因是所有電子郵件都是唯一的,但有時(shí)用戶名已被使用。因此,我將自動創(chuàng)建用戶名為fullName_ID。我該如何更改才能讓Django通過電子郵件進(jìn)行身份驗(yàn)證?這就是我創(chuàng)建用戶的方式。username = `abcd28`user_email = `abcd@gmail.com`user = User.objects.create_user(username, user_email, user_pass)這就是我的登錄方式。email = request.POST['email']password = request.POST['password']username = User.objects.get(email=email.lower()).usernameuser = authenticate(username=username, password=password)login(request, user)除了先獲取用戶名外,登錄還有其他方法嗎?
查看完整描述

3 回答

?
倚天杖

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個(gè)贊

您應(yīng)該編寫一個(gè)自定義身份驗(yàn)證后端。這樣的事情會起作用:


from django.contrib.auth import get_user_model

from django.contrib.auth.backends import ModelBackend


class EmailBackend(ModelBackend):

    def authenticate(self, username=None, password=None, **kwargs):

        UserModel = get_user_model()

        try:

            user = UserModel.objects.get(email=username)

        except UserModel.DoesNotExist:

            return None

        else:

            if user.check_password(password):

                return user

        return None

然后,在您的設(shè)置中將該后端設(shè)置為您的auth后端:


AUTHENTICATION_BACKENDS = ['path.to.auth.module.EmailBackend']

已更新。繼承自ModelBackend它get_user()已經(jīng)實(shí)現(xiàn)的方法。


查看完整回答
反對 回復(fù) 2019-11-28
  • 3 回答
  • 0 關(guān)注
  • 1088 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號