1. 회원가입 시 비밀번호 암호화
import bcrypt
@app.route("/sign-up", methods=['GET','POST'])
def sign_up():
new_user = request.json
new_user['password'] = bcrypt.hashpw(
new_user['pasword'].encode('UTF_8'),
bcrypt.gensalt()
)
new_user_id = insert_user(new_user)
new_user = get_user(new_user_id)
return jsonify(new_user)
Line 6-8 :
hashpw() 함수를 사용하여 사용자의 비밀번호 UTF-8 엔코딩으로 byte로 변환 후 salting을 추가하여 암호화 한다.
2. 로그인 인증
import bcrypt
import jwt
@app.route('/login', methods=["POST"])
def login():
credential = request.json
email = credential['email']
password = credential['password']
user_credential = get_user_id_and_password(email)
if user_credential and bcrypt.checkpw(password.encode('UTF-8'),
user_credential['hashed_password'].encode('UTF-8')) :
user_id = user_credential['id']
payload = {
'user_id' : user_id,
'exp' : datetime.utcnow() + timedelta(seconds= 60*60*24)
}
token = jwt.encode(payload, app.config['JWT_SECRET_KEY'],'HS256')
return jsonify({
'access_token' : token.decode("UTF_8")
})
else :
return " ", 401
Line 2-3 : http 요청으로 전송된 JSON에서 사용자의 이메일과 비밀번호를 읽어온다.
Line 9 : DB와 연결된 쿼리문 함수인 get_user_id_and_password에서 이메일을 사용해 암호화된 비밀번호를 가져온다.
Line 11 : Line9에서 가져온 이미 암호화된 비밀번호와 checkpw 함수를 사용해서 암호화한 비밀번호가 일치하는지 확인한다.
Line 14-17 : 사용자의 비밀번호가 확인되면 JWT를 생성한다. DB의 해당 사용자의 user_id, 유효기간인 exp를 설정한다. (하루로 설정)
Line 18 : 위에서 생성한 payload의 JSON데이터를 JWT로 생성한다
Line 20 : 라인18에서 생성한 JWT를 HTTP 응답으로 보낸다.
Line 24 : 사용자가 존재하지 않거나 비밀번호가 틀리면 401응답 전송한다.
'Python > Flask' 카테고리의 다른 글
[미니터] 인증 - tweet, follow, unfollow에 decorator 추가 (0) | 2022.07.15 |
---|---|
[미니터] 인증 - 인증 decorator 함수 (0) | 2022.07.15 |
[미니터] 인증 (0) | 2022.07.14 |
[미니터] DB연결 - 타임라인 (0) | 2022.07.14 |
[미니터] DB연결 - 팔로우와 언팔로우 (0) | 2022.07.14 |