본문 바로가기

TIL/알고리즘

[TIL] 항해99 Day 3

728x90

항해 3일차

여전히 삽질중이다.
팀원들과 아직 구현하지 못한 기능에 대해 분담하여 해결하기로 하였다.
회원가입 과정에서 입력 값들이 설정한 형식에 맞게 입력되는지, 패스워드는 해시 함수를 사용하여 암호화되어 저장되는지, 로그인 과정에서 토큰이 발행되어 쿠키에 저장이 되는지를 찾아보았다.

회원가입

function is_nickname(asValue) {
    var regExp = /^(?=.*[a-zA-Z])[-a-zA-Z0-9_.]{2,10}$/;
  //(?=.*[a-zA-Z])는 필수 입력, [-a-zA-Z0-9_.]일반적인 입력
  //{2,10} 2~10자 길이

    return regExp.test(asValue);
}

function is_password(asValue) {
    var regExp = /^(?=.*\d)(?=.*[a-zA-Z])[0-9a-zA-Z!@#$%^&*]{8,20}$/;
    return regExp.test(asValue);
}

로그인

@app.route('/sign_in', methods=['POST'])
def sign_in():
    # 로그인
    username_receive = request.form['username_give']
    password_receive = request.form['password_give']

    pw_hash = hashlib.sha256(password_receive.encode('utf-8')).hexdigest()
    result = db.users.find_one({'username': username_receive, 'password': pw_hash})

    if result is not None:
        payload = {
         'id': username_receive,
         'exp': datetime.utcnow() + timedelta(seconds=60 * 60 * 24)  
        }
        token = jwt.encode(payload, SECRET_KEY, algorithm='HS256')

        return jsonify({'result': 'success', 'token': token})

    else:
        return jsonify({'result': 'fail', 'msg': '아이디/비밀번호가 일치하지 않습니다.'})