1

私は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

ありがとう!

4

1 に答える 1

1

Devise Sessions コントローラーを指すことができますroot_path: "devise/sessions#new" (そして、ホーム ビューをそのページに移動します)。また、この行をルートに追加することもできます。

get "/" => "devise/sessions#new", :as => :user_session

これを行うと、サインインに失敗すると、ホームページ (現在は devise/sessions/new にあります) に戻ります。

于 2012-06-16T03:12:17.030 に答える