4

ユーザーが当社の Web サイトのルートに入るか、ログアウトすると、Devise 認証は最初に「続行する前にサインインまたはサインアップする必要があります」と表示します。ページをリロードすると、このメッセージは消えます。

私たちの Web サイトのルートは、以下を持つコントローラーに設定されています。

before_filter :authenticate_user!

このコントローラーをルートにする必要があります。このメッセージを消すには?

4

6 に答える 6

8

正しい解決策は、公式 wiki に記載されているように認証済みブロックを設定することです: https://github.com/plataformatec/devise/wiki/How-To:-Require-authentication-for-all-pages

  authenticated :user do
    root to: 'home#index', as: :authenticated_root
  end
  root to: redirect('/users/sign_in')

スコープ付きauthenticatedブロックは、ログインしたときにのみ呼び出されるため、ユーザーを選択したコントローラーに喜んで誘導できます。この例では、認証されていないときにサインイン ページにリダイレクトしますが、これはルート内の任意のアクションである可能性があります。

于 2016-03-01T00:29:29.113 に答える
4

定義するよりも良い解決策が見つかりませんでした

unauthenticated: ''

/config/locales/devise.en.yml ファイルに。

于 2012-05-28T10:12:49.287 に答える
3

インデックスだけでメッセージを削除しますか? もしそうなら、あなたは次のようなことをすることができます:

before_filter :authenticate_user!, :except => [:index]

他のアクションを配列に追加することもできます。

これは指定されたアクションを呼び出さないことに注意してくださいauthenticate_user!。そのため、指定されたアクションに対してユーザーを認証する必要がないことを確認してください。

于 2012-05-26T22:58:24.147 に答える
0

すべてのページ (ログイン、サインアップなどを除く) が に対して保護されているシナリオでは、before_action :authenticate_user!Devise を次のSessionControllerようにオーバーライドします。

app/controllers/sessions_controller.rb

class SessionsController < Devise::SessionsController
  def new
    if flash[:alert] == unauthenticated_message
      flash.delete(:alert) unless requested_protected_page?
    end
    super
  end

  private

  def requested_protected_page?
    session[:user_return_to] != root_path
  end

  def unauthenticated_message
    I18n.t('devise.failure.unauthenticated')
  end
end

そして、config/routes.rbそのオーバーライドされたコントローラーを使用するようにファイルに指示します。

devise_for :users, controllers: {
  sessions: :sessions,
}
于 2015-04-03T16:00:49.703 に答える
0

以下に示すように、デバイスのエラーメッセージをカプセル化したと仮定します。

<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>

次の CSS コードをルート コントローラーのインデックス ビュー ファイルに追加できます。

<style type="text/css">
  .notice, .alert { visibility: hidden; }
</style>

これにより、Web サイトのルートからエラー メッセージが表示されなくなります。

于 2012-05-28T10:48:37.053 に答える
-1

ユーザーがログインしているかどうかを解決し、目的の場所にリダイレクトするためだけに、コントローラーで別のアクションを作成できます。

class WelcomeController < ApplicationController
  skip_before_filter :authenticate_user!, only: :root

  def index
  end

  def root
    flash.keep
    redirect_to current_user ? welcome_index_path : new_user_session_path
  end
end

これは機能するはずです。もちろん、ApplicationController に含める必要があります。

before_filer: authenticate_user!

そして、welcome#root に設定されたルートルートで

于 2013-08-14T13:08:37.843 に答える