ユーザー認証時のハッシュ化したパスワードの照合について
解決したいこと
プログラミング初心者です。
現在、WebアプリをPythonのフレームワークFastAPIで作成中です。
ログイン認証機能を作成していますが、DBのハッシュ化して格納しているパスワードとログイン時に入力したパスワードをハッシュ化して、照合し、ユーザー認証を行いたいのですが、パスワードが一致せず、困っております。
以下のように書いております。
hashlib.contextの使い方が良くないのでしょうか。
コードに不備があれば、ぜひ教えて頂きたいです。
発生している問題・エラー
出ているエラーメッセージを入力
例)
2021-03-10 06:52:25,510 INFO sqlalchemy.engine.base.Engine INSERT INTO users (name, email, password, age, gender, height, weight, kind_of_sport, type_of_team, years_of_experience, group_id, last_login, created_at, updated_at) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
api | 2021-03-10 06:52:25,511 INFO sqlalchemy.engine.base.Engine ('Taro', 'baseball11@gmail.com', '$2b$12$QI/qWujhn/eHbSnU2CZv0erEW8hPm.ZLshyl1ovkjVVL9Fz/qWru.', 20, '男', 165, 60, '野球', '大学硬式', 15, 0, datetime.datetime(2021, 3, 10, 6, 52, 25, 510764), datetime.datetime(2021, 3, 10, 6, 52, 25, 510793), None)
api | 2021-03-10 06:52:25,539 INFO sqlalchemy.engine.base.Engine COMMIT
api | 2021-03-10 06:52:25,717 INFO sqlalchemy.engine.base.Engine BEGIN (implicit)
api | 2021-03-10 06:52:25,725 INFO sqlalchemy.engine.base.Engine SELECT `groups`.id AS groups_id, `groups`.created_at AS groups_created_at, `groups`.updated_at AS groups_updated_at, `groups`.name AS groups_name, `groups`.description AS groups_description, `groups`.capacity AS groups_capacity, `groups`.number_of_members AS groups_number_of_members
api | FROM `groups`, users_groups
api | WHERE %s = users_groups.user_id AND `groups`.id = users_groups.group_id ORDER BY `groups`.id
api | 2021-03-10 06:52:25,726 INFO sqlalchemy.engine.base.Engine (11,)
api | 2021-03-10 06:52:25,825 INFO sqlalchemy.engine.base.Engine ROLLBACK
api | INFO: 172.18.0.1:36596 - "POST /v0/users HTTP/1.1" 200 OK
api | 2021-03-10 06:52:56,551 INFO sqlalchemy.engine.base.Engine BEGIN (implicit)
api | 2021-03-10 06:52:56,567 INFO sqlalchemy.engine.base.Engine SELECT users.id AS users_id, users.name AS users_name, users.email AS users_email, users.password AS users_password, users.age AS users_age, users.gender AS users_gender, users.height AS users_height, users.weight AS users_weight, users.kind_of_sport AS users_kind_of_sport, users.type_of_team AS users_type_of_team, users.years_of_experience AS users_years_of_experience, users.group_id AS users_group_id, users.last_login AS users_last_login, users.created_at AS users_created_at, users.updated_at AS users_updated_at
api | FROM users
api | WHERE users.name = %s
api | LIMIT %s
api | 2021-03-10 06:52:56,568 INFO sqlalchemy.engine.base.Engine ('Taro', 1)
api | INFO: 172.18.0.1:36602 - "POST /v0/admin/token HTTP/1.1" 401 Unauthorized
または、問題・エラーが起きている画像をここにドラッグアンドドロップ
該当するソースコード
from typing import Optional
from datetime import datetime, timedelta
from fastapi import APIRouter, Depends, HTTPException
from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm
from jose import jwt
from passlib.context import CryptContext
from settings.db import session
from models.users import Users
from schemas.users import UserResponse
from schemas.admin import Tokens
router = APIRouter()
pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
OAuth2_scheme = OAuth2PasswordBearer(tokenUrl="token")
def authenticate(name:Optional[str]=None, password:Optional[str]=None):
"""ユーザーの認証 """
check_password=pwd_context.hash(password)
session.commit()
user = session.query(Users).filter(Users.name == name).first()
if pwd_context.verify(user.password, check_password) == False:
raise HTTPException(status_code=401, detail="パスワードが違います。")
return user
自分で試したこと
ここに問題・エラーに対して試したことを記載してください。
0