使用 redirect_back 后验证用户是否获得授权

Verifying user is authorized after using redirect_back

我有一个方法可以创建一个新的用户会话,并在成功登录后重定向回上一个屏幕。它引入了一个安全问题,有人可以输入 url 导航到他们不应该访问的页面。该应用程序将引导他们登录,但在使用有效凭据登录后(只是不是适当的许可级别),它会将他们重定向到他们手动输入 url 的页面。我如何验证 redirect_back 没有将用户发送到他们不应该访问的页面?

这是会话创建方法:

 def create
    @user = authenticate(params)
    sign_in(@user) do |status|
      if status.success?
        redirect_back root_path
      else
        flash.now.alert = status.failure_message
        render :new, status: :unauthorized
      end
    end
  end

有没有办法查看它将把它们发回哪个地址,因为我可以做类似的事情

if back_url.includes? "admin"
  redirect_to root_path
end


您不能依赖 URL 晦涩难懂的应用程序安全性。您的管理路由或控制器应受到保护,以便只有登录的管理员才能访问它们。

您可以通过路由文件中的路由约束(我的偏好)或在所有管理控制器上一致应用的之前操作来执行此操作 returns 如果当前用户不是 403管理员。