Project: westagram -2 (21.05.31)


👍 今日やったこと


  • タスクの続行2-コストエントリポイントの作成
    作成(修正完了)
  • 会員入力モデル
  • 作成(完了)
  • 会員ビュー
  • 会員登録時、パスワードハッシュをdbに格納(完了)
  • に変更

  • タスク3進捗-ログインエンドポイントの作成(PRステータス)
  • 🔥 変更


    ユーザー・モデルの変更


    空の既存のニックネームとphone numberは許可されていますが、許可されていません.
    class User(models.Model):
    .
    .
        nickname     = models.CharField(max_length=40, unique=True)
        phone_number = models.CharField(max_length=13, unique=True)
    .
    .
    既存のget()から[]に変更
     nickname     = data['nickname'] 
     phone_number = data['phone_number']

    dbに格納されているパスワードのハッシュ

  • 一方向hashアルゴリズムを用いたbcryptに変更して処理する
    def encrypt_password(password):
        return bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt())
  • パスワードCharFieldからBinaryFieldに変更
    データベースに格納されている情報
  • 勘定科目勘定科目3-ログイン機能の実装


    📝 View


    1.usersまたはaccounts appにログインビューを記入してください.[完了👍]
    2.ログインには、ユーザーアカウントとして電子メールとパスワードを使用する必要があります.[完了👍]
    3.アカウントまたはパスワードキーが渡されていない場合は、{メッセージ:KEY ERROR}、status code 400を返します.[完了👍]
    4.アカウントまたはパスワードの入力が間違っている場合は、{メッセージ:INVALID USER}、status code 401が返されます.[完了👍]
    5.ログインに成功すると{"メッセージ":"SUCCESS"},status code 200に戻る.[完了👍]
    6.ログインに成功したらtokenに戻ります.[完了👍]

    ⚙▼処理ロジック

                data     = json.loads(request.body)
                email    = data['email']
                password = data['password']
                user     = User.objects.get(email=email)
    
                if not check_password(password, user.password):
                    return JsonResponse({"message": "INVALID_USER"}, status=401)    
    
                user_token = make_user_token(user.id)
    
                return JsonResponse({"message": "SUCCESS", "token": user_token}, status=200)
  • から送信されたデータを受信する.
  • ユーザ情報照会
  • ユーザー情報がある場合は、パスワードが正しいかどうかを確認します.
  • のパスワードが正しい場合、tokenが発行され、結果に含める
  • が送信される.

    🚀 送信データの受信

  • JSON形式のデータをdictionary形式に変換して受信する.
  • 「email」または「password」キー値を持つデータがない場合、KeyError
  • 回発生します.
  • bodyに値がない場合、JSONDecodeError;
  • が生成される.

    🔎 ユーザー情報の表示

  • 2get()メソッドを使用して、Eメールの対応するユーザーがいるかどうかを確認します.
  • ユーザが不在の場合、DoesNotExistエラー
  • が発生する.

    🔎 パスワードが正しいことを確認

  • から送信されたパスワードをdb上のハッシュ情報と比較し、
  • が同じかどうかを確認します.
    def check_password(password, hashed_password):
        return bcrypt.checkpw(password.encode('utf-8'), hashed_password)

    👏 パスワードが正しい場合はtokenを送信し、結果に含めます。

  • jwtを使用してtokenを生成します.
  • に必要なSECRET KEY、HASH ALGORITHM情報は유출이 되면 안된다(Gitに提出不可)
  • である.
  • DB情報のように、ローカルのみに存在する設定ファイルに保存して項目を設定します.pyによって読み込まれ、使用可能に構成されます.
  • from ######.settings      import SECRET_KEY, HASH_ALGORITHM
    
    def make_user_token(id):
        return jwt.encode({'user_id': id}, SECRET_KEY, algorithm=HASH_ALGORITHM)
    settings.py
    from my_settings import SECRET_KEY, DATABASES, HASH_ALGORITHM
    .
    .
    .
    HASH_ALGORITHM = HASH_ALGORITHM