0

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

/loginURLへのリダイレクトを機能させる唯一の方法は、これを my の先頭に追加することroutes.rbです。

match "/users/sign_in" => redirect('/login')

これにより、アプリケーションにリダイレクトが追加され、テストが台無しになります-次のようなことをするたびに:

current_url.should == login_path

予想されるパスは「/login」で、実際のパスは「/users/sign_in」であるというエラーが表示されます。

ここで何かを見逃していましたか - それを回避するエレガントな方法は何ですか? ありがとう。

サイドノート

:omniauthable私は認証にのみ使用し:database_authenticatableますが、専用のログインページに強制的に移動するように構成を工夫するために追加しました。

それ以外の場合、devise は常にルート パスに移動するため、そのように思われます。それを行うためのより良い方法を知っている場合は、どうぞ - 声をかけてください。

4

0 に答える 0