亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

Django-使用電子郵件登錄

Django-使用電子郵件登錄

慕碼人2483693 2019-11-28 14:09:57
我希望django通過電子郵件而非用戶名對用戶進行身份驗證。一種方法是提供電子郵件值作為用戶名值,但我不希望那樣。原因是,我有一個url /profile/<username>/,所以我不能有一個url /profile/[email protected]/。另一個原因是所有電子郵件都是唯一的,但有時用戶名已被使用。因此,我將自動創建用戶名為fullName_ID。我該如何更改才能讓Django通過電子郵件進行身份驗證?這就是我創建用戶的方式。username = `abcd28`user_email = `[email protected]`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貢獻1828條經驗 獲得超3個贊

您應該編寫一個自定義身份驗證后端。這樣的事情會起作用:


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

然后,在您的設置中將該后端設置為您的auth后端:


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

已更新。繼承自ModelBackend它get_user()已經實現的方法。


查看完整回答
反對 回復 2019-11-28
  • 3 回答
  • 0 關注
  • 1079 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號