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
'programing' 카테고리의 다른 글
해시 인수를 사용한 DRY Ruby 초기화 (0) | 2021.01.17 |
---|---|
맞춤 주문 설명 (0) | 2021.01.17 |
SDK 도구, 버전 12에서 Android 에뮬레이터 시작 (0) | 2021.01.17 |
RequiredIf 조건부 유효성 검사 속성 (0) | 2021.01.17 |
androidX 라이브러리에없는 BottomSheetBehavior (0) | 2021.01.16 |