Torihaji's Growth Diary

Little by little, no hurry.

初めての個人開発日記 5日目

はじめに

5日目です。今週土日リリース予定ですが、果たして。

とりあえず、現状です。

技術選定

[frontend]

  • Nextjs(pages router) => App Routerの理解に苦しんだため
  • MUI => 調べたランキングでtopだったため
  • react-hook-form => フォーム管理と言ったらこれでは?
  • zod => 少しだけ使い慣れてるから

[backend]

  • Rails 7 => 使い慣れているため
  • devise => 定番だから
  • devise-jwt => devise-token-authが古いらしいのでこっち

[github]

GitHub - torihazi/diary_front

GitHub - torihazi/diary_back

認証の続き。

現状は登録はできるようになったけど、ログインができない、というのが現状。

というか今日からやたらめったらAI使うのを控えよ。

なんかJTIMathcerていう方法にしよ。

devise-jwt authentication in Rails 7 backend application | by Suchitra B | Medium

devise.rb
  config.jwt do |jwt|
    jwt.secret = Rails.application.credentials.devise_jwt_secret_key!
    jwt.dispatch_requests = [
      ['POST', %r{^/login$}]
    ]
    jwt.revocation_requests = [
      ['DELETE', %r{^/logout$}]
    ]
    jwt.expiration_time = 1.day.to_i
  end
~~
routes.rb
Rails.application.routes.draw do

  if Rails.env.development?
    mount LetterOpenerWeb::Engine, at: "/letter_opener"
  end

  namespace :api, defaults: {format: :json} do
    namespace :v1 do
      devise_for :users, 
      path_names: {
        sign_in: 'login',
        sign_out: 'logout'
      },
      controllers: { 
        registrations: 'api/v1/users/registrations',
        sessions: 'api/v1/users/sessions'
      }
    end
  end

  get "up" => "rails/health#show", as: :rails_health_check

end

jti_denylistの時作ったやつをrollbackしてmigrationファイル消して、

こっちのjtiをuserに追加するやつで再チャレンジ。

class AddJtiToUsers < ActiveRecord::Migration[7.1]
  def change
    add_column :users, :jti, :string, null: false
    add_index :users, :jti, unique: true
  end
end
class User < ApplicationRecord
  include Devise::JWT::RevocationStrategies::JTIMatcher
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
  devise :database_authenticatable, :registerable,:confirmable,
         :recoverable, :validatable,
         :jwt_authenticatable, jwt_revocation_strategy: self
end

でmigrate。

この時点で、叩いてみる

無事登録はできて、jtiとかいうカラムも一緒に帰ってきてる。

ということでこのままこのuserでsigninしてみよう。

間違えた、sign_inじゃなくてloginだ。

"#<ActionDispatch::Http::Parameters::ParseError: Error occurred while parsing request parameters>",

あーこれはあれだ、respond_to :jsonを下に書いてたので修正

class Api::V1::Users::SessionsController < Devise::SessionsController
  include RackSessionFix
  respond_to :json

違った。送るリクエストの形式がおかしかった。最後の , がいらなかった。

リベンジ。

結果は変わらなかった。

ちょっとAdd respond_with using jsonapi_serializers methodの項もコピペでやってみよう。

まぁ変わらないか。データを加工してるだけだから。

  # POST /resource/sign_in
  def create
    self.resource = warden.authenticate!(auth_options)
    if resource
      if !resource.is_confirmed
        render json: "bad"
      else
        sign_in(resource_name, resource)
        yield resource if block_given?
        render json: "good"
      end
    else
      render json: "yaba"
    end
  end

ヤケクソでsession_controllerをいじくってみた。

これならなんか変わるでしょ。知らんけど。

結果変わらず。

ということはそれ以前の問題なのでは?

終わりに

最悪、寝落ちしてた。 9/17。。