はじめに
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。。