Open swarf00 opened 5 years ago
shell 커맨드에서 이메일이 잘 발송되는 지 테스트하고 나서 AttributeError: 'User' object has no attribute 'email_user' 오류가 뜨는데 어떻게 해결해야 되냐요?
@cskang8264 shell 커맨드에서 이메일이 잘 발송되는 지 테스트하고 나서 AttributeError: 'User' object has no attribute 'email_user' 오류가 뜨는데 어떻게 해결해야 되냐요?
email_user 라는 메소드가 정의되어 있지 않은 문제인데, 가입하기 튜토리얼에서 User 모델 정의할 때 해당 메소드를 빼먹고 올렸었네요. 죄송합니다. 해당부분은 수정했습니다. 혹시 번거로우실까봐 여기에 다시 올려드릴께요.
class User(AbstractBaseUser, PermissionsMixin):
email = models.EmailField('email', unique=True)
name = models.CharField('이름', max_length=30, blank=True)
is_staff = models.BooleanField('스태프 권한', default=False)
is_active = models.BooleanField('사용중', default=True)
date_joined = models.DateTimeField('가입일', default=timezone.now)
objects = UserManager()
USERNAME_FIELD = 'email' # email을 사용자의 식별자로 설정
REQUIRED_FIELDS = ['name'] # 필수입력값
class Meta:
verbose_name = _('user')
verbose_name_plural = _('users')
swappable = 'AUTH_USER_MODEL'
def email_user(self, subject, message, from_email=None, **kwargs): # 이메일 발송 메소드
send_mail(subject, message, from_email, [self.email], **kwargs)
받은 이메일에서 인증할 때 'is_valid_token() takes 1 positional argument but 2 were given' 라고 뜨는데 어떻게 해결해야 할까요? UserVerificationView클래스의 get 함수 호풀시 일어나는 일입니다.
@shikshik99 받은 이메일에서 인증할 때 'is_valid_token() takes 1 positional argument but 2 were given' 라고 뜨는데 어떻게 해결해야 할까요? UserVerificationView클래스의 get 함수 호풀시 일어나는 일입니다.
죄송합니다. 코드 중에 오타가 있었군요. is_valid_token
함수를 호출할 때 **kwargs
를 넘겨주셔야 합니다.
# user/views.py
from django.http import HttpResponseRedirect
from django.views.generic.base import TemplateView
# 생략
class UserVerificationView(TemplateView):
model = get_user_model()
redirect_url = '/user/login/'
token_generator = default_token_generator
def get(self, request, *args, **kwargs):
if self.is_valid_token(**kwargs):
messages.info(request, '인증이 완료되었습니다.')
else:
messages.error(request, '인증이 실패되었습니다.')
return HttpResponseRedirect(self.redirect_url) # 인증 성공여부와 상관없이 무조건 로그인 페이지로 이동
def is_valid_token(self, **kwargs):
pk = kwargs.get('pk')
token = kwargs.get('tonen')
user = self.model.objects.get(pk=pk)
is_valid = self.token_generator.check_token(user, token)
if is_valid:
user.is_active = True
user.save() # 데이터가 변경되면 반드시 save() 메소드 호출
return is_valid
# 생략
UserRegistrationView에서 html_message 부분 from_email=self.email_template_name 이라고 써있는데 오타인거 맞죠?
@1301625 UserRegistrationView에서 html_message 부분 from_email=self.email_template_name 이라고 써있는데 오타인거 맞죠?
예 다시 보니 오타네요. 아래처럼 수정하시면 정상적으로 동작할 겁니다.
html_message = render(self.request, self.email_template_name, {'url': url}).content.decode('utf-8')
https://swarf00.github.io/2018/12/14/logout.html
장고(Django) 웹프레임워크에서 이메일인증 및 로그아웃 기능 구현방방을 알아봅니다.