はじめに
5日目です。今週土日リリース予定ですが、果たして。
とりあえず、現状です。
技術選定
[frontend]
- Nextjs(pages router) => App Routerの理解に苦しんだため
- MUI => 調べたランキングでtopだったため
- react-hook-form => フォーム管理と言ったらこれでは?
- zod => 少しだけ使い慣れてるから
[backend]
- Rails 7 => 使い慣れているため
- devise => 定番だから
- devise-jwt => devise-token-authが古いらしいのでこっち
[github]
認証の続き。
現状は登録はできるようになったけど、ログインができない、というのが現状。
というか今日からやたらめったら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。。