Masonite Framework 및 JSON 웹 토큰을 사용하여 처음부터 이메일 확인 구축

Masonite Framework은 최신 개발자 중심 Python 웹 프레임워크입니다. Masonite의 아키텍처는 Laravel 프레임워크와 훨씬 더 유사합니다.

이 튜토리얼에서는 Masonite 애플리케이션에 대한 이메일 확인을 처음부터 작성하는 방법을 보여드리겠습니다.

Masonite는 Craft라는 CLI 도구와 함께 제공됩니다. Craft는 간단한 명령을 사용하여 인증에 필요한 것을 스캐폴드하는 쉬운 방법을 제공합니다.

$ craft auth


위의 명령은 인증에 필요한 모든 것(4개의 새 컨트롤러, 5개의 새 템플릿 및 6개의 새 경로)을 생성합니다. 따라서 사용자 이메일 확인을 처리하고 이메일의 유효성을 검사하려고 합니다. 우리는 거기에 갈!

새로운 Masonite 프로젝트 생성 및 스캐폴드 인증




$ pipenv install masonite-cli
$ craft new masonite-app-with-user-verification 
$ cd masonite-app-with-user-verification 
$ craft install 
$ craft auth 


데이터베이스 설정



사용자를 등록하려면 데이터베이스가 필요합니다. MySQL 데이터베이스를 사용합시다.

$ pipenv install PyMySQL


새 데이터베이스를 만들고 데이터베이스 자격 증명을 .env 파일에 넣습니다.




DB_DRIVER=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=masonite
DB_USERNAME=root
DB_PASSWORD=root


사용자 모델에 '활성' 속성 추가



새 마이그레이션을 생성해 보겠습니다.

$ craft migration add_active_to_users_table --table=users


그런 다음 새 활성 속성을 추가합니다.

from orator.migrations import Migration
class AddActiveToUsersTable(Migration):
    def up(self):
         with self.schema.table('users') as table:
             table.boolean('active').default(False)

    def down(self):
         with self.schema.table('users') as table:
             table.drop_column('active')


마이그레이션 적용 😄

$ craft migrate


이메일 확인에 JWT를 사용하는 이유는 무엇입니까?



JSON Web Tokens은 당사자 간에 정보를 안전하게 전송하는 좋은 방법입니다.

이메일 확인을 위해 등록된 사용자에게 임의의 해시를 보내야 합니다.

등록 시 새 jwt 토큰 생성



Python에서 JSON 웹 토큰 구현을 사용해야 합니다.

$ pipenv install PyJWT


그 다음에

data = {'email': user.email}
encoded = jwt.encode(data, os.environ.get('KEY'), algorithm='HS256')
token = str(encoded, 'utf-8')


이제 메일을 보내야 합니다. Masonite는 이를 수행하는 데 도움이 되는 패키지 호출notification을 제공합니다.

$ pipenv install masonite-notifications


이메일 확인을 위한 알림을 만들어 봅시다.

$ craft notification EmailVerificationNotification


알림은 인증 토큰이 포함된 링크가 포함된 이메일을 보내야 합니다.

from notifications import Notifiable

class EmailVerificationNotification(Notifiable):
def mail(self):
    return self.subject('New account signup!') \
        .driver('smtp') \
        .heading('Masonite App With User Verification') \
        .line('In order to use your account, you have to validate your email address.') \
        .line('Please click on the link below.') \
        .action('Validate my account', href=self._link)


나쁘지 않다.

그런 다음 해당 이메일을 사용자에게 보냅니다.

if token:
    Notify.mail(EmailVerificationNotification, to=user.email, link='http://localhost:8000/activate/{0}'.format(token))
    Session.flash(‘success’, ‘Almost done! Please check your email to complete the registration process.’)
    return Request.redirect(‘/login’)


smtp 자격 증명이 정확하면 메일에 다음과 같이 표시됩니다.



이메일 확인을 위한 경로 만들기




get('/activate/@token', 'RegisterController@validate')


사용자 모델에서 채울 수 있는 속성 '활성화' 정의




class User(Model):
    __fillable__ = ['name', 'email', 'password', 'active']


사용자 확인




def validate(self, Request):
    if Request.param('token'):
        data = jwt.decode(Request.param('token'), os.environ.get('KEY'), algorithms=[‘HS256’])
        user = User.where('email', data['email']).first()
        if user:
            user.active = True
            user.save()
            Session.flash('success', 'You\'re in! Let\'s login!')
    return Request.redirect('/login')


마지막 것! 로그인 사용자:




def store(self, Request, Session):
    user = User.where('email', Request.input('email')).first()
    if user.active:
        if Auth(Request).login(Request.input('email'), Request.input('password')):
            return Request.redirect('/home')
        return Request.redirect('/login')
    else:
        Session.flash('warning', 'Please check your email to complete the registration process.')
        return Request.back()


이제 사용자가 확인되었습니다 🔥



이 물건을 Masonite 패키지 안에 풀어 놓겠습니다. 패키지 개발에 기여하고 싶거나 Masonite 개발에 관심이 있는 경우 반드시 Slack channel에 가입하거나 저장소GitHub에 별표를 표시하십시오.

추가 토론을 위해 자유롭게 의견을 추가하십시오. 이 자습서의 전체 코드는 Github에서 사용할 수 있습니다. 감사!

좋은 웹페이지 즐겨찾기