2017-11-05 2 views
0

es war 5 Tage strugling mit diesem.Es funktionierte zunächst gut, aber plötzlich fing es an, mir einige Fehler, die ich nicht verstehen konnte, so begann ich meinen Code zu ändern MyCustomUser-Modell und benutzerdefinierte Authentifizierung Backend aber immer noch kann ich dieses Problem nicht.request.user.is_authentifizierte immer wieder anonym in python/django

Ich kann Benutzer anmelden und es meldet sich der Benutzer nach der Anmeldung, aber wenn ich Django-Shell öffnen und testen, ob user.is_authenticated gibt True zurück und user.is_anonymous gibt False zurück.

Kann bitte jemand helfen mir zu identifizieren, was das Problem hier ist. Bitte Kollegen Django-Entwickler.

unten ist mein sign_up Ansicht:

def sign_up(request): 

    if request.method == 'POST': 
     form = SignUpForm(request.POST) 

     if form.is_valid(): 

      new_user = form.save(commit=False) 

      #create string of first_name an last_name 
      full_name = '{0} {1}' .format(new_user.first_name, new_user.last_name) 

      #Slugify full name 
      new_user.slug = slugify(full_name) 

      new_user.save() 

      email = request.POST.get('email') 
      raw_password = request.POST.get('password1') 

      #Authenticate the user 
      user = authenticate(email=email, password=raw_password) 

      if user is not None : 

       login(request, user) 
       if request.user.is_authenticated: 

        #Redirect to success url after user has successfully is logged in. 
         return HttpResponseRedirect(reverse_lazy('jogos:question-list')) 


    else: 
     form = SignUpForm() 
    return render(request, 'jogos/sign_up.html', {'form':form}) 




from jogos.models import MyCustomUser 
from django.contrib.auth import get_user_model 

Und mein CustomBackend, die ich in meinen Einstellungen auch eingesteckt haben.

class MyCustomBackend(object): 

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

     if email is None: 
      email = kwargs.get('email') 


     try: 
      user = MyCustomUser.objects.get(email=email) 


      if user.check_password(password): 
       return user 
      else: 
       return None 

     except MyCustomUser.DoesNotExist: 
       return None 




     def get_user(self, user_id): 
      try: 
       user = MyCustomUser.objects.get(pk=user_id) 
       if user.is_active: 
        return user 

     except MyCustomUser.DoesNotExist: 
      return None 

Mein CustomUser Modell:

class MyCustomUser(AbstractBaseUser): 
    email = models.EmailField(max_length=50, verbose_name='email', unique=True) 
    first_name = models.CharField(max_length=15,blank=False) 
    last_name  = models.CharField(max_length=15,blank=True) 
    slug   = models.SlugField(null=True, unique=True) 
    is_staff  = models.BooleanField(default=False) 
    is_active  = models.BooleanField(default=True) 
    is_admin  = models.BooleanField(default=False) 
    is_superuser = models.BooleanField(default=False) 

    objects = UserManager() 

    USERNAME_FIELD = 'email' 
    REQUIRED_FIELDS = [] 


    def get_full_name(self): 
     full_name = '{0} {1}'.format(self.first_name, self.last_name) 
     return full_name.strip() 

    def get_short_name(self): 
     return self.first_name 


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

    def has_module_perms(self, app_label): 
     return True 


    @property 
    def is_superuser(self): 
     return self.is_superuser 

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


    def __str__(self): 
     return self.first_name 

Und alse Mein Usermanager:

from django.contrib.auth.base_user import BaseUserManager 


class UserManager(BaseUserManager): 
    use_in_migrations = True 

    def create_user(self, email, password=None): 

     if not email: 
      raise ValueError("Users must have an email address") 

     email = UserManager.normalize_email(email) 
     user = self.model(email=email) 

     user.set_password(password) 

     user.is_active = True 
     user.save(using=self._db) 
     return user 



    def create_superuser(self, email, password): 

     user = self.create_user(email, password=password) 

     user.is_active = True 
     user.is_superuser = True  
     user.is_admin = True 
     user.save(using=self._db) 

     return user 

ich kann nicht herausfinden, was hier falsch ist, und das alles Code funktioniert reibungslos und es fing erst an, mir Probleme zu bereiten, als ich meine Codebasis weiter entwickelte

Antwort

2

Sie haben die Logik ist falsch herum. Bis Sie einen Benutzer anmelden, ist request.user per Definition ein nicht authentifizierter Benutzer. So wird request.user.is_authenticated immer falsch sein.

Sie brauchen oder wollen diese Eigenschaft dort nicht überprüfen. Sie müssen nicht wirklich überprüfen, ob der Benutzer auch keine ist, da Sie ihn gerade erstellt haben, damit Sie wissen, dass er existiert. Loggen Sie den Benutzer einfach direkt ein.

(Beachten Sie, ich verstehe nicht, warum Sie eine benutzerdefinierte-Authentifizierungs-Backend angelegt haben. Es ist nicht etwas vom Standard anders macht. Sie brauchen es nicht.)

+0

Sehr Dank, ich entfernt haben Diese Zeile aber jetzt Benutzer ist als anonym angemeldet. Bedeutung Authentifizierung fehlgeschlagen. – Silas

+0

Wie überprüfen Sie das? –

+0

Ich überprüfe es auf der Vorlage, die Frageform rendern und überprüfen, ob Benutzer authentifiziert oder anonym ist, bevor der Benutzer eine Frage stellen konnte, gibt es anonym zurück – Silas