개발로 자기계발
article thumbnail
728x90

1. auth.py 새로운 API 생성

@router.post("/register", response_class=HTMLResponse)
async def register_user(request: Request, email: str = Form(...), username: str = Form(...),
                        firstname: str = Form(...), lastname: str = Form(...),
                        password: str = Form(...), password2: str = Form(...),
                        db: Session = Depends(get_db)):

    validation1 = db.query(models.Users).filter(models.Users.username == username).first()

    validation2 = db.query(models.Users).filter(models.Users.email == email).first()

    if password != password2 or validation1 is not None or validation2 is not None:
        msg = "Invalid register request"
        return templates.TemplateResponse("register.html", {"request": request, "msg": msg})

    user_model = models.Users()
    user_model.username = username
    user_model.email = email
    user_model.first_name = firstname
    user_model.last_name = lastname
    user_model.hashed_password = get_password_hash(password)
    user_model.is_active = True

    db.add(user_model)
    db.flush()
    db.commit()

    msg = "User Successfully created"
    return templates.TemplateResponse("login.html", {"reuqest": request, "msg": msg})
회원가입 간에 이미 회원가입이 되어있는 사용자를 확인한다
확인 1 = 사용자 이름
확인 2 = 사용자 이메일

패스워드와 확인 패스워드가 같지 않거나 사용자 이름과 이메일이 존재한다면 회원가입불가 => 다시 회원가입
그게 아니라면 Users 테이블에 사용자를 저장하고 로그인 페이지로 이동한다.

 

2. register.html 수정

{% include 'layout.html' %}

<div class="container">
    <div class="card">
       <!--상단타이틀-->
        <div class="card-header">
            Register
        </div>
        <div class="card-body">
           {% if msg %}
           <div class="alert alert-danger" role="alert">
            {{msg}}
           </div>
           {% endif %}

            <form method="POST" action="/auth/register" ...>
            </form>
        </div>

    <div class="card-footer text-muted">
            <a href="/auth">Already have an account?</a>
        </div>
    </div>
</div>

 

3. login.html에 register url 주소 추가

{% include 'layout.html' %}

<div class="container">
    <div class="card">
       <!--상단타이틀-->
        <div class="card-header">
            Login
        </div>
        <div class="card-body">

           {% if msg %}
           {% if msg == 'Logout Successful' or msg == 'User Successfully created' %}
           <div class="alert alert-success" role="alert">
              {{msg}}
           </div>
           {% else %}
           <div class="alert alert-danger" role="alert">
              {{msg}}
           </div>
           {% endif %}
           {% endif %}


            <form method="POST" action="/auth" ...>
        </div>
        
        <div class="card-footer text-muted">
        #추가
            <a href="register"> Register? </a>
        </div>
    </div>
</div>

 

4. 회원가입 해보기

  • 존재하고있는 사용자로 회원가입 시

 

  • 존재하지 않는 사용자로 회원가입시

 

5. 새로운 사용자에 todo 테이블 데이터 추가해 보기

728x90
SMALL
profile

개발로 자기계발

@김잠봉

틀린부분이나 조언이 있다면 언제든 환영입니다:-)