2012-07-01 71 views
1

我是相當新的Django,想問關於用戶身份驗證和登錄英寸我閱讀文檔,我無法找到正確的答案/方向關於我在嘗試去完成。基本上,我必須整合到一個遺留系統中,所以我不能使用默認的auth_user表或類似的東西。我在我的應用程序定義的模型下面寫:用戶認證Django與自定義用戶模型和表

class User(models.Model): 
    class Meta: 
    db_table = 'user' 
    def __unicode__(self): 
    return self.first_name + ' ' + self.last_name 

    first_name = models.CharField(max_length=64) 
    last_name = models.CharField(max_length=64) 
    email = models.CharField(max_length=64) 
    password = models.CharField(max_length=32) 
    active = models.CharField(max_length=1) 
    last_modified = models.DateTimeField("last modified") 
    timestamp = models.DateTimeField("timestamp") 

我的問題是,我怎麼能利用上述模式(或者我應該做哪些改變吧)與身份驗證的應用程序工作?現在我有認證以下後端按文檔:

class CustomAuth(ModelBackend): 
    def authenticate(**credentials): 
     return super(CustomAuth, self).authenticate(**credentials) 

    def authenticate(self, username=None, password=None):  
     # Check the username/password and return a User. 
     if username != None and password != None: 
      # Get the user 
      try: 
       user = User.objects.get(email=username) 
       if user.check_password(password): 
        logger.info('User is authenticated, logging user in') 
        return user 
      except User.DoesNotExist: 
       pass 
     return None 

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

我試圖測試按如下:

user = authenticate(username='[email protected]', password='testUser') 

我不斷收到各種錯誤,如'module' object is not callable。我還在settings.py文件中包含了我的自定義身份驗證。有沒有我想要做的例子?任何幫助表示讚賞,謝謝!

編輯 我改變了我的模型,下面:

from django.db import models 
from django.contrib.auth.models import User as AuthUser, UserManager 

# Extend the base User model 
class User(AuthUser): 
    class Meta: 
     db_table = 'user' 

    active = models.CharField(max_length=1) 
    last_modified = models.DateTimeField("last modified") 

    objects = UserManager() 
+0

你讀過[this](http://www.b-list.org/weblog/2006/jun/06/django-tips-extending-user-model/)和[this](http:// scottbarnham.com/blog/2008/08/21/extending-the-django-user-model-with-inheritance/)和[this](http://stackoverflow.com/questions/44109/extending-the-user- model-with-custom-fields-in-django),基本上你擴展/關聯'默認'用戶模型,而不是自己創建。 –

+0

你說的是從構建到框架中的'User'模型繼承?爲什麼我不想這樣做,它需要我有不同的列,我不需要/希望,因爲我正在集成到遺留數據模型中......或者我的理解是不正確的? – KVISH

+1

我發現了一篇適合我的文章......不確定這是推薦的方式嗎? http://tomforb.es/using-a-custom-sqlalchemy-users-model-with-django – KVISH

回答

3

它看起來像一個問題是,您的自定義後端有兩個authenticate方法。您可能想要刪除頂部的一個。

這裏的an example關於如何編寫自定義後端來處理基於電子郵件地址的登錄。

+5

鏈接不工作 – StErMi

相關問題