devise ログイン後のリダイレクトができない
解決したいこと
railsのAPIモードでログイン機能を実装中です。
devise(gem)を使用して、ログインが成功した後にマイページ(user/show)へリダイレクトしたいのですが、下記のエラーが発生します。
発生している問題・エラー
以下はpostmanでJSON形式で確認した結果です。
"status": 500,
"error": "Internal Server Error",
"exception": "#<ArgumentError: wrong number of arguments (given 0, expected 1)>",
"traces": {
"Application Trace": [
{
"exception_object_id": 723680,
"id": 0,
"trace": "app/controllers/application_controller.rb:7:in `after_sign_in_path_for'"
},
{
"exception_object_id": 723680,
"id": 1,
"trace": "app/controllers/users/sessions_controller.rb:20:in `create'"
}
該当するソースコード
app/controllers/users/sessions_controller.rb
module Api
module V1
module Clients
class Users::SessionsController < Devise::SessionsController
before_action :authenticate_user!, only: [:show]
def create
user = User.find_by(email: params[:session][:email].downcase)
if user && user.valid_password?(params[:session][:password])
session[:user_id] = user.id
log_in user
user_path(after_sign_in_path_for)
# redirect_to 'http://localhost:3000/api/v1/clients/users/1'
# render json: { status: 'SUCSESS', message: 'ログインしました', data: user }
else
render json: { status: 'LOGIN ERROR', message: 'メールアドレスまたはパスワードが正しくありません', data: user }
end
end
end
end
end
end
config/routes.rb
Rails.application.routes.draw do
namespace 'api' do
namespace 'v1' do
namespace 'clients' do
root :to => 'home#index'
devise_for :users, controllers: {
:registrations => "users/registrations",
:sessions => "users/sessions"
}
resources :users do
end
end
end
end
end
app/controllers/application_controller.rb
class ApplicationController < ActionController::API
include ActionController::Cookies
include SessionsHelper
protected
def after_sign_in_path_for(resource)
user_path
end
end
app/helpers/sessions_helper.rb
module SessionsHelper
def log_in(user)
session[:user_id] = user.id
end
end
app/controllers/api/v1/clients/users_controller.rb
module Api
module V1
module Clients
class UsersController < ApplicationController
before_action :logged_in_user, only:[:edit, :update, :destroy]
def index
end
def show
@user = User.find(params[:id])
render json: { status: 'SUCSESS', message: 'Loaded the Users', data: @user }
end
end
end
end
end
自分で試したこと
初めはsessions_controller.rbで
redirect_to user_path
としていたのですが、以下のエラーになりました。
"status": 500,
"error": "Internal Server Error",
"exception": "#<NameError: undefined local variable or method `user_path' for #<Users::SessionsController:0x0000000017bd58>
デフォルトでは root_url に飛ばされると書いていたので変更しました。
下記のような記事を参考にしました。
0