#事象
rails g devise User
を実装して、users controllerにはbefore_action :authenticate_user!
してある。
users_controller.rb
class UsersController < ApplicationController
before_action :authenticate_user!
def index
end
def show
end
end
routes.rb
Rails.application.routes.draw do
root 'home#index'
resources :users
devise_for :users
end
rootがHome#index
で、ここからログイン、新規アカウント作成へリンクしている。
しかし、 ログイン
をクリックするとログインページへは移動せずに「このページは動作していません」となってしまった。
原因と解決方法
ログを見ると Parameters: {"id"=>"sign_in"}
となっていて、Completed 401 Unauthorized が返っているのがわかる。
Started GET "/users/sign_in" for 127.0.0.1 at 2019-03-20 00:42:44 +0900
Processing by UsersController#show as HTML
Parameters: {"id"=>"sign_in"}
Completed 401 Unauthorized in 1ms (ActiveRecord: 0.0ms)
rails routes
を見てみると。
$ rails routes
Prefix Verb URI Pattern Controller#Action
root GET / home#index
users GET /users(.:format) users#index
POST /users(.:format) users#create
new_user GET /users/new(.:format) users#new
edit_user GET /users/:id/edit(.:format) users#edit
user GET /users/:id(.:format) users#show
PATCH /users/:id(.:format) users#update
PUT /users/:id(.:format) users#update
DELETE /users/:id(.:format) users#destroy
new_user_session GET /users/sign_in(.:format) devise/sessions#new
user_session POST /users/sign_in(.:format) devise/sessions#create
destroy_user_session DELETE /users/sign_out(.:format) devise/sessions#destroy
new_user_password GET /users/password/new(.:format) devise/passwords#new
edit_user_password GET /users/password/edit(.:format) devise/passwords#edit
user_password PATCH /users/password(.:format) devise/passwords#update
PUT /users/password(.:format) devise/passwords#update
POST /users/password(.:format) devise/passwords#create
cancel_user_registration GET /users/cancel(.:format) devise/registrations#cancel
new_user_registration GET /users/sign_up(.:format) devise/registrations#new
edit_user_registration GET /users/edit(.:format) devise/registrations#edit
user_registration PATCH /users(.:format) devise/registrations#update
PUT /users(.:format) devise/registrations#update
DELETE /users(.:format) devise/registrations#destroy
POST /users(.:format) devise/registrations#create
となっており、
/users/:id(.:format)
が
/users/sign_in(.:format)
より上位(優先度が上)にいるのが原因だった。
なのでroutes.rbを
routes.rb
Rails.application.routes.draw do
root 'home#index'
devise_for :users
resources :users
end
にすれば無事ログイン画面へ遷移できた。
(devise_for :users
を上、resources :users
を下にした)