2015-04-07 30 views
0

我在Django很新。我嘗試在註冊用戶之後創建一個自動登錄。但我失敗了。 我爲用戶名和密碼創建了一個自定義auth後端。Django的1.7「AnonymousUser」對象有沒有屬性「後臺」

class EmailBackend(object): 
def authenticate(self, username=None, password=None): 
    user_cls = get_user_model() 
    try: 
     user = user_cls.objects.get(email=username) 
     if user.check_password(password): 
      return user 
    except user_cls.DoesNotExist: 
     return None 


def get_user(self, user_id): 
    user_cls = get_user_model() 
    try: 
     return user_cls.objects.get(pk=user_id) 
    except user_cls.DoesNotExist: 
     return None 

AUTHENTICATION_BACKENDS = (
    'user.back_auth.EmailBackend', 
    'django.contrib.auth.backends.ModelBackend', 
) 

我儘量讓自動登錄註冊後用戶:

def register(request): 
if request.method == 'POST': 
    user_form = UserForm(request.POST) 
    if user_form.is_valid(): 
     user = user_form.save() 
     messages.info(request, "Thanks for registering. You are now logged in.") 
     user = authenticate(username=request.POST['username'], 
          password=request.POST['password']) 
     login(request, user) 
     return HttpResponseRedirect("/") 
else: 
    user_form = UserForm() 
    return render(request, 
      'user/register.html', 
      {'user_form': user_form }) 

但是,我得到了下:

AttributeError的在/用戶/註冊/ 'AnonymousUser'對象有沒有屬性「後臺」

+0

你有或者你可以在任何用戶窗體'save'方法確保用戶被創建或什麼?還要告訴密碼看起來如何(明文或散列)? –

+0

我在UserForm中沒有其他保存方法。並且密碼是明文 –

+1

爲什麼你甚至有自定義auth後端?它沒有做任何不同於標準的東西。 –

回答

1

您的用戶創造了我thod是錯誤的,因爲我假設你以純文本保存用戶。

兩種方式...

使用使用set_password

方法方法create_user

0

我的工作版本:

def register(request): 
if request.method == 'POST': 
    user_form = UserForm(request.POST) 
    if user_form.is_valid(): 
     user = user_form.save() 
     user.set_password(request.POST['password']) 
     user.save() 
     username = request.POST['username'] 
     password = request.POST['password'] 
     user = authenticate(username=username,password=password) 
     user.backend = 'django.contrib.auth.backends.ModelBackend' 
     login(request, user) 
    messages.info(request, "Thanks for register!") 
    return HttpResponseRedirect("/") 
相關問題