課題
- ゲストログインを実装する際に、既存の
sessions_controller.rb
にメソッドを追加する
api/v1/users/auth/sessions_controller.rb
# frozen_string_literal: true
class Api::V1::Users::Auth::SessionsController < DeviseTokenAuth::SessionsController
# 今回はこれを追加!
+ def guest_sign_in
+ # ゲストログイン処理
+ end
end
問題
ルーティングをなかなか追加することができませんでした。
devise_scope :user
と記載したのですが、なかなかうまくいかず・・・。
routes.rb
Rails.application.routes.draw do
namespace :api do
namespace :v1 do
- devise_scope :user do
- post 'users/guest_sign_in', to: 'users/auth/sessions#guest_sign_in'
- end
mount_devise_token_auth_for 'User', at: 'user/auth', controllers: {
registrations: 'api/v1/users/auth/registrations',
sessions: 'api/v1/users/auth/sessions',
confirmations: 'api/v1/users/auth/confirmations',
passwords: 'api/v1/users/auth/passwords'
}
end
end
end
解決策
devise_scope :api_v1_user
と記載すると追加することができました。
routes.rb
# frozen_string_literal: true
Rails.application.routes.draw do
namespace :api do
namespace :v1 do
+ devise_scope :api_v1_user do
+ post 'users/guest_sign_in', to: 'users/auth/sessions#guest_sign_in'
+ end
mount_devise_token_auth_for 'User', at: 'user/auth', controllers: {
registrations: 'api/v1/users/auth/registrations',
sessions: 'api/v1/users/auth/sessions',
confirmations: 'api/v1/users/auth/confirmations',
passwords: 'api/v1/users/auth/passwords'
}
end
end
end
devise_scope :user
で追加できるものと思っていたので、かなり時間を取られました。
namespceの影響がここまで来るとは思いませんでした・・。