참고 실습 자료 : https://github.com/lijahong/allauth_and_fileupload_example
- 회원가입할때 email을 입력받아 가입시켜야한다
- 회원정보를 login 할 수 없는 상태로 DB에 저장시킨다
- 회원가입시 login 가능한 상태를 알려주는 is_active를 0으로 저장해야한다. 1은 기본값이며 login 가능한 상태이다
- Python 프로그램이 mail server에 접속해서 token 값과 mail을 전송 ( 본 project에서는 구글의 mail server를 사용한다)
- 사용자가 받은 mail에 is_active 를 1로 변경해주는 view를 호출하는 URL을 포함시킨다
- 전송된 mail에는 timeout 기능도 있어야한다
- django.contrib.auth보다 기능이 많지만, model이 없으므로 django.contrib.auth의 model을 사용해야한다
- library 추가시 migrate 필요
- AbstractBaseUser : 상속받는 model, 인증 방식까지 다 사용자 맞춤으로 설정
- AbstractUser : 상속받는 model만 수정, 기능은 가져와서 쓴다
- 추가한 App, 추가한 library, 추가한 library의 기능을 Installed_App에 추가해주고, allauth가 참고하는 contrib.sites도 추가한다
- sites는 하나의 서버에서 여러개의 web site를 관리할 수 있다
- sites 관련 설정으로 관리할 web site의 id를 입력, 이번에는 하나의 web site만으로 진행하기에 1로 입력한다
- BACKEND : console로 되어있으면 console로 메일을 보내는 것이다. 따라서 실제 메일을 보낼 때는 console 부분을 smtp로 바꿔주자
- allauth는 model이 없기에 사용자가 만든 model을 사용한다고 설정한다
- allauth에서 만든 URL File을 사용
- 실행 결과
- AllAuth에서 만든 페이지가 나온다
- 인증 방법은 email을 통해 진행하고, username은 불필요, email은 필요하다고 설정한다
- email이 필수로 바뀐다. 회원가입을 진행해보자
- DB에 잘 저장된다
- 현재 is_active가 1로 되어있어서 인증이 안되도 로그인이 가능하게 되있다
- mandatory로 하여 email 인증을 해야지 로그인이 가능하게 한다
- none으로 하면 인증 없이 로그인 가능, optional로 하면 email은 보내지만 인증 안해도 로그인 가능
- 사용자가 url을 접속하면 get방식으로 온다. get 방식으로 email 인증에 접속했을때 허용시켜주는 옵션
- 회원가입시 email 인증창이 뜬다
- DB 확인
- 어째서 is_active가 1일까? AllAuth는 account_emailconfirmation으로 email 인증을 따로 처리하기때문이다
- 회원가입 관련된 설정들이다
- 인증된 Email에 대해 account_emailaddress의 verified가 1로 바뀐다
Email 관련 protocol
- imap : 클라이언트와 서버가 mail을 받을때 사용하는 protocol. 메일 서버에서 동기화가 이루어지며 수신함 뿐만 아니라 모든 메일함을 조회 가능하다. 서버에 이메일 실시간 존재하며 온/오프 모두 지원한다
- pop3 : 클라이언트와 서버가 mail을 받을때 사용하는 protocol. 메일 서버에서 로컬장치로 이메일을 다운로드 받으며, 받은 메일만을 다운로드 하여 조회 가능하다 (수신함). 로컬장치로 다운로드하면 서버에서는 이메일 삭제하며 오프라인만 지원한다
- smtp : 서버가 mail을 보낼때 사용
현재 mail Server가 없기에 Google사의 mail server를 사용
- imap을 사용하기 위해 '사용'으로 변경해준다
- django 에서 mail을 보내기 위해선 '보안 수준이 낮은 앱' 관련 설정을 해야한다. django에서 현재 만드는 프로젝트는 보안 수준이 낮은데, 사용자의 실제 gmail을 이용해야하기 때문이다. 근데 이게 22년 5월 30일 부터 안된다. 그래서 다른 방법을 사용하겠다
- Django App이 사용할 앱 비밀번호를 발급받는다
- gmail을 사용하기에 mail - windows 컴퓨터
- 발급 받은 앱 비밀번호
- EMAIL_HOST : 사용할 도메인 주소
- EMAIL_PORT : gmail의 port 번호
- EMAIL_HOST_USER : email을 보내는 이메일
- EMAIL_HOST_PASSWORD : 앱 비밀번호
- EMAIL_USER_TLS : email 보낼때 암호화 여부
- DEFAULT_FORM_EMAIL : mail을 보낼 email id 지정
- ACCOUNT_EMAIL_CONFIRMATION_EXPIRE_DAYS : 보낸 email만료날짜 (일 기준)
- ACCOUNT_EMAIL_SUBJECT_PREFIX : 보내지는 email 맨 앞에 붙여지는 이름
- EmailMessage는 지정한 email에 mail을 보내주게 하는 객체이다
- send()를 통해 전송한다
- 제목, 내용, to = 보낼 mail 주소 를 넣어줘야 한다
- mail은 전송되지 않았지만 기능 동작에는 성공했다
- 이 부분은 Backend가 smtp가 아닌 console로 되어있어서 이렇게 동작했다. 밑에서 실제 메일 보내는 결과를 보겠다
- Allauth의 signup을 통해 회원가입하면
- 잘 도착한 것을 확인할 수 있다
- USER에는 사용하는 네이버 ID의 앞 부분만 작성
- PASSWORD는 HOST ID의 PASSWORD를 작성. 네이버 ID에 대한 비밀번호
- 프로젝트 template에 폴더를 만들어 두개의 파일을 넣어줘야한다
- message가 내용이고, subject는 제목이다
- message는 인증 url을 줘야한다
- 이러한 변수들은 정해져있는 것으로 Allauth 메뉴얼을 참조하자
- user는 수신 받는 email의 @ 앞단이다
- 수정 사항이 잘 출력된다
- 인증 완료가 잘 기능한다