Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在尝试访问页面而未在rails中进行身份验证后,将用户重定向到root_Ruby On Rails - Fatal编程技术网

Ruby on rails 在尝试访问页面而未在rails中进行身份验证后,将用户重定向到root

Ruby on rails 在尝试访问页面而未在rails中进行身份验证后,将用户重定向到root,ruby-on-rails,Ruby On Rails,因此,正如标题所说,在用户尝试访问受保护的页面后,如何将用户重定向到根目录而不是登录页面 这是我的routes.rb文件 . . . root 'pages#home' authenticate :user do mount Kibana::Sinatra::Web => '/kibana', :trailing_slash => true end . . . 如果您使用的是authenticate\u user!在控制器中执行以下操作: 在应用程序控制器

因此,正如标题所说,在用户尝试访问受保护的页面后,如何将用户重定向到根目录而不是登录页面

这是我的routes.rb文件

.
.
. 
  root 'pages#home'

  authenticate :user do
     mount Kibana::Sinatra::Web => '/kibana', :trailing_slash => true
  end
.
.
.

如果您使用的是authenticate\u user!在控制器中执行以下操作:

在应用程序控制器中添加以下内容:

  protected
  def authenticate_user!
    redirect_to root_path, notice: "You are not authorised to access this page" unless user_signed_in?
  end
但是,如果要从路由进行身份验证,则必须使用约束

  • 编辑路由,使其看起来如下所示,并将未找到的URL与根目录匹配:

    mount Kibana::Sinatra::Web => '/kibana', :trailing_slash => true, :constraints => AllowAccess.new
    match ':not_found' => redirect('/'), :constraints => { :not_found => /.*/ }
    
  • 在lib文件夹中创建一个新的约束“allow_access”,并使用以下代码

    class AllowAccess
      def matches?(request)
        return false unless request.session["warden.user.user.key"]
      end
    end
    
  • 并在application.rb中添加这一行以自动加载lib文件

       config.autoload_paths += Dir["#{config.root}/lib/**/"]
    

    非常感谢。但这对我不起作用,我仍然重定向到/user/sign_in而不是root.Hello。谢谢你的更新。您能更详细地介绍一下我应该在哪里创建allow_access.rb文件吗?设计gem目录的lib的项目目录中的lib?谢谢。在您的rails lib目录中,不要忘记重新启动服务器,这在启动服务器时引发了以下错误:未初始化的常量AllowAccess(NameError)更新了带有lib autoload的应答