私はDeviseを学ぼうとしていますが、SOに関する多くの質問とほぼ同じ問題に遭遇したようですが、それらの質問のスレッドに従ってあまり牽引力が得られないほどわずかに異なります。
私は非常に単純なアプリケーションを持っています。ユーザーはサインインおよびサインアウトできます (また、デバイスの「パスワードを忘れた」機能が有効になっています - 現時点では気にしません)。登録できず、パスワードを変更する以外にプロファイルを編集できず、サインインとサインアウト以外は何もできません。(アカウントの作成は、今のところ、コマンド ラインで手動で処理されます。)
ユーザーがログインできる唯一のページが "/" ( ) であることを強く望みますroot_path
。「/」からログインできる場所で既に動作していますが、それは素晴らしいことです。私が抱えている問題は、root_path ログイン ページからユーザーとパスワードの組み合わせを間違って入力すると、自動的に Devise サインイン ページに移動し、サインインを続行しようとすることです。Devise を root_path にリダイレクトするにはどうすればよいですかサインイン失敗?
これが私のルートです-おそらく最適ではないか、正しく構成されていないため、それらを修正するための指針をいただければ幸いです:
root to: "core_pages#splash"
devise_for :users, skip: [:sessions]
as :user do
# get 'signin' => 'devise/sessions#new', as: :new_user_session
post 'signin' => 'devise/sessions#create', as: :user_session
delete 'signout' => 'devise/sessions#destroy', as: :destroy_user_session,
via: Devise.mappings[:user].sign_out_via
end
match '/home' => 'core_pages#home'
コメントアウトされた 'get signin' 行に注意してください。システムはこの行がなくても動作しますが、驚くべきことに (私にとって)、「GET /signin」は HTTP 400 (OK) 応答を返し、Devise ログイン テンプレートをレンダリングします。ある種の「無効なリクエスト」を返すか、ユーザーをサイレントにリダイレクトすることをお勧めしますroot_path
。
これらのルートで実行rake routes
すると、次のようになります。
root / core_pages#splash
user_password POST /users/password(.:format) devise/passwords#create
new_user_password GET /users/password/new(.:format) devise/passwords#new
edit_user_password GET /users/password/edit(.:format) devise/passwords#edit
PUT /users/password(.:format) devise/passwords#update
user_session POST /signin(.:format) devise/sessions#create
destroy_user_session DELETE /signout(.:format) devise/sessions#destroy
home /home(.:format) core_pages#home
ありがとう!