4

当用户进入我们网站的根目录或注销时,Devise 身份验证第一次显示“您需要先登录或注册才能继续”。页面重新加载后,此消息消失。

我们网站的根目录设置为具有以下功能的控制器:

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

假设您已经封装了您的设计错误消息,如下所示。

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

您可以将以下 CSS 代码添加到根控制器的索引视图文件中。

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

这应该隐藏您网站根目录的错误消息。

于 2012-05-28T10:48:37.053 回答
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 回答
-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 回答