programing

Django-AttributeError 'User'객체에는 'backend'속성이 없습니다 (하지만…

yoursource 2021. 1. 17. 12:23
반응형

Django-AttributeError 'User'객체에는 'backend'속성이 없습니다 (하지만…


사용자를 등록한 후 로그인하기 위해 user.backend 속성을 수동으로 설정했습니다. 일반적으로 내 견해에서 작동합니다. 이 경우 AJAX를 통해 사용자를 등록하려고합니다. AttributeError가 발생합니다.

내 코드는 다음과 같습니다.

 def register_async(request):
    if request.method=='POST':

    userform=MyUserCreationForm(request.POST)
    if userform.is_valid():
        #username of <30 char is required by Django User model.  I'm storing username as a hash of user email 

        user=userform.save(commit=False)
        user.username=hash(user.email)
        user.backend='django.contrib.auth.backends.ModelBackend'
        user.save()


        auth.login(request,user)
        user_status=1
        user_fname=user.first_name
        user_data=[{'user_status':user_status, 'user_fname':user_fname}]
        json_data=json.dumps(user_data)
        response=HttpResponse()
        response['Content-Type']="text/javascript"
        response.write(json_data)
        return response 

    else:
        user_data=[{'user_status':"0"}]
        json_data=json.dumps(user_data)
        response=HttpResponse()
        response['Content-Type']="text/javascript"
        response.write(json_data)
        return response 
else:
    return HttpResponse()

편집-여기 AJAX가 있습니다. 그것은 꽤 표준으로 보인다

     //ajax registration.  
$('input#register_submit').click(function(event){
    $(this).attr('disabled','disabled');
    $('<div class="register-animation"><img src="{{site}}media/ajax-loader3.gif"/></div>').appendTo('#register_modal_btn');

    $.post("/register/", $('div#register_side form').serialize(), 
        function(data){
            $.each(data,function(){
            if(this.user_status==1){
                $('.register-animation').remove();
                $('.right_section .top').html('<ul><li class="sep_nav">Hi, '+ this.user_fname + '</li><li class="sep+nav"><a href="http://nabshack.com/logout/">Log Out</a></li><li class="refar_friend"><a href="http://nabshack.com/referral/">Refer a friend and get $50</a></li></ul>');
                $('#post_login_modal').dialog("close");

                $('a.login').unbind('click');
                $('li a.account').unbind('click');

            }       
            else{
            $('input#register_submit').removeAttr('disabled');
            $('.register-animation').remove();
            window.location='{{site}}register';
            }

        });
    },'json');
    return false;
    event.stopPropagation();
});

이 정확한 코드는 나를 위해 ajax가 아닌 뷰에서 작동합니다. 무엇을 제공합니까?

감사


당신은 호출해야 authenticate당신이 호출 할 수 있습니다 전에 login. authenticate어떤 백엔드가 성공적으로 유효성을 검사했는지 표시하고 로그인을 위해 지우는 객체에 속성을 설정합니다. 이는 코드에서 발생하지 않습니다 (누락 된 속성입니다).

Documentation: https://docs.djangoproject.com/en/1.8/topics/auth/default/#how-to-log-a-user-in -- check out the little callout that says "calling authenticate() first".


I'll post this as an answer, But I owe it to https://stackoverflow.com/users/558699/ben in the comments above, and https://stackoverflow.com/a/5837046/1467342. I was scanning this question and missed that what I was looking for was in the comments. Adding a backend manually has been a (hacky) fix for me twice so far:

user.backend = 'django.contrib.auth.backends.ModelBackend'
login(request, user)

In both cases, I'm relying on other authentication methods (email confirmation and admin authenticated session) for verifying permission to log in as this user.


in Django 1.10, django.contrib.auth.login now takes a backend= keyword argument!

https://code.djangoproject.com/ticket/24855

ReferenceURL : https://stackoverflow.com/questions/6034763/django-attributeerror-user-object-has-no-attribute-backend-but-it-does

반응형