1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Rails】Rails APIでログイン、ログアウト

Posted at

前回、Rails APIでUser周りの実装をしました。
【Rails】JWTを用いたUser周りのAPI実装
その記事のログイン、ログアウトで気になったことをまとめます。
先にmodel、controllerを貼り付けておきます。

models/usr.rb
class User < ApplicationRecord
  before_save { self.email = email.downcase }
  validates :name, presence: true, length: { maximum: 50 }
  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
  validates :email, presence: true, length: { maximum: 255 },
                    format: { with: VALID_EMAIL_REGEX },
                    uniqueness: true
  has_secure_password
  validates :password, presence: true, length: { minimum: 6 }
end
controllers/api/v1/users_controller.rb
module Api
  module V1
    class SessionsController < ApiController
      # ログイン
      def create
        user = User.find_by(email: params[:email])

        if user&.authenticate(params[:password])
          token = encode_token(user_id: user.id)
          render json: { message: "ログインに成功しました。", token: token }, status: :ok
        else
          render json: { error: "メールアドレスまたはパスワードが無効です。" }, status: :unauthorized
        end
      end

      # ログアウト
      def destroy
        render json: { message: "ログアウトしました。" }, status: :ok
      end

      private

      # JWTトークンをエンコード
      def encode_token(payload)
        JWT.encode(payload, Rails.application.secrets.secret_key_base)
      end
    end
  end
end

encode_token

JSON Web Token (JWT) を生成するためのものです。この関数は、渡された payload(トークンに含めたいデータ)をエンコードし、署名付きのトークンを作成します。

def encode_token(payload)
  JWT.encode(payload, Rails.application.secrets.secret_key_base)
end
  • payload
    トークンに含めたい情報をハッシュの形式で payload に渡します。今回は、ユーザーIDです。
  • JWT.encode
    payload を指定された秘密鍵でエンコードして、JWT(JSON Web Token)を生成します。JWTは、3つの部分から構成される文字列です(ヘッダー、ペイロード、署名)。生成されたトークンは、この3つの部分を結合したもので、後でトークンを検証するときに利用されます。
  • Rails.application.secrets.secret_key_base
    トークンを署名するための秘密鍵として、Railsの secret_key_base を使用しています。secret_key_base はアプリケーションの機密情報であり、トークンの署名に利用することでトークンの安全性を確保しています。
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?