Devise wikiに従って、ログイン ルートを から に切り替えまし/users/sign_in
た/login
。私のルートファイルは次のようになります。
devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" }
devise_scope :user do
get '/login' , :to => 'devise/sessions#new' , :as => :login
delete '/logout', :to => 'devise/sessions#destroy', :as => :logout
end
私のユーザーモデルにはこれがあります
class User < ActiveRecord::Base
devise :omniauthable, :database_authenticatable
end
ユーザーがログアウトされ、制限されたページにアクセスしようとした後、リダイレクトされてログインするという一般的なシナリオがあります。
ただし、そのユーザーがリダイレクトされると、devise はユーザーを/users/sign_in
ではなく path に送信します/login
。
/login
URLへのリダイレクトを機能させる唯一の方法は、これを my の先頭に追加することroutes.rb
です。
match "/users/sign_in" => redirect('/login')
これにより、アプリケーションにリダイレクトが追加され、テストが台無しになります-次のようなことをするたびに:
current_url.should == login_path
予想されるパスは「/login」で、実際のパスは「/users/sign_in」であるというエラーが表示されます。
ここで何かを見逃していましたか - それを回避するエレガントな方法は何ですか? ありがとう。
サイドノート
:omniauthable
私は認証にのみ使用し:database_authenticatable
ますが、専用のログインページに強制的に移動するように構成を工夫するために追加しました。
それ以外の場合、devise は常にルート パスに移動するため、そのように思われます。それを行うためのより良い方法を知っている場合は、どうぞ - 声をかけてください。