簡體   English   中英

在Django中擴展用戶模型后,我無法登錄

[英]After extending the User model in django, I can not log in

這就是我擴展用戶模型的方式:

class User(AbstractBaseUser):
    email = models.EmailField(verbose_name='email',max_length=255,unique=True, db_index=True,)
    username = models.CharField(verbose_name='username',  max_length=255, unique=True)
    first_name = models.CharField(verbose_name='first_name',  max_length=255, blank=True)
    last_name = models.CharField(verbose_name='last_name',  max_length=255, blank=True)
    is_active = models.BooleanField(default=True)
    is_admin = models.BooleanField(default=False)
    objects = UserManager()
    avatar = models.ImageField(upload_to='profile_images', blank=True)

    USERNAME_FIELD = 'username'
    REQUIRED_FIELDS = ['username']

    def get_full_name(self):
        return '%s %s' % (self.first_name, self.last_name,)

    def get_short_name(self):
        return self.username

    def __unicode__(self):
        return self.email

    def has_perm(self, perm, obj=None):
        return True

    def has_module_perms(self, app_label):
        return True

    @property
    def is_staff(self):
        return self.is_admin

效果很好,但是在注冊新用戶后,我無法使用他的用戶名和密碼登錄,並且在我的數據庫中,我現在有2個用戶表

auth_user-舊用戶

blog_user-新的擴展用戶

而且我只能使用auth_user中的用戶登錄

這就是我在views.py中登錄的內容:

@csrf_protect
def loginn(request):
    c = {}
    c.update(csrf(request))
    return render_to_response("login/login.html", c)


@csrf_protect
def auth_view(request):
    username = request.POST.get('username', '')
    password = request.POST.get('password', '')
    user = authenticate(username=username, password=password)
    if user is not None:
        if user.is_active:
            login(request, user)
            return render_to_response('login/loggedin.html',RequestContext(request))
    else:
        return HttpResponseRedirect('/posts/invalid')

那么,如何從新的擴展表中以用戶身份登錄?

為了允許在authenticate()方法中使用自定義用戶模型,Django需要設置AUTH_USER_MODEL設置。 https://docs.djangoproject.com/en/dev/topics/auth/customizing/#substituting-a-custom-user-model

對於您的示例代碼,它是settings.py中的AUTH_USER_MODEL = 'blog.User'

authenticate()方法調用get_user_model()並查找是否設置了AUTH_USER_MODEL設置,然后將其用作進行驗證的模型的基礎。

請確保閱讀有關在Django中替換自定義用戶模型的文檔。 在決定切換auth用戶模型之前,應注意一些警告。

如果可能的話,我建議您僅擴展基本身份驗證用戶模型,使其包含您需要的任何特定於應用程序的字段,因為看起來您仍在通過用戶名登錄用戶。 https://docs.djangoproject.com/en/dev/topics/auth/customizing/#extending-the-existing-user-model

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM