首页 > 解决方案 > 使用设计验证静态文件?

问题描述

我的网站上有一个静态的 Jekyll 支持页面,服务于/public/support. 主要的 Rails 应用程序落后于设计 - 整个事情。如果您未通过身份验证,您将被踢回登录。我可以在 Devise 身份验证后面“隐藏”这个静态站点吗?即仅在经过身份验证后才允许访问静态页面?

标签: devise

解决方案


我最终找到了这个:

https://docs.nginx.com/nginx/admin-guide/security-controls/configuring-subrequest-authentication/

在我的 NGINX 配置中,我有这个:

  location /support {
    auth_request /auth;
    auth_request_set $auth_status $upstream_status;
    error_page 403 https://$host;
  }

在我的应用程序控制器中,我有:

before_action :authenticate_user!, except: :auth

这绕过了设计。

在路线:

get '/auth', to: 'errors#auth'

将它添加到我现有的自定义错误控制器中很有意义。

然后在控制器中:

  def auth
    user_signed_in? ? render(status: 200, layout: :blank) : render(status: 403, layout: :blank)
  end

空白布局没有内容 - 只是一个<%= yield %>.

如果用户有一个打开的 Devise 会话,他们可以访问支持站点,否则他们会被重定向到登录页面(Devise 的默认设置)。


推荐阅读