如何使用403 HTTP状态代码重定向到主页以进行未经授权的请求

时间:2017-08-31 07:48:49

标签: javascript ruby-on-rails rest redirect http-status-code-403

所以这看起来很简单,但显然我无法解决这个问题。 在我的Rails应用程序中,我需要进行用户授权 因此,目前在我的应用程序中,如果用户未经授权查看资源,我将使用msg:You are not allowed将用户重定向到其主页。此方法返回HTTP 302。 我想从我的控制器返回403,稍后在浏览器Javascript中我想要处理如果http状态代码为403然后重定向到主页。

我找到this answer但它也在进行相同的重定向。

当前逻辑:

  def authorize
    unless user_has_access?
      redirect_to home_page, :notice => 'if dont have access to that resource'
    end
  end

但是这会返回请求的HTTP 302,理想情况下应该是403。

我想要这样的事情:

控制器

  def authorize
    unless user_has_access?
      flash[:notice] = 'not allowed'
      return {status: 403, msg: 'nunauthorized', redirect_url: home_page}
    end
  end

并在JS中处理它的一些方式:

if status == 403
    window.location(redirect_url)
end
  1. 这可以在铁轨中使用吗?
  2. 这有什么宝石吗?
  3. flash[:notice]仍可在重定向的网址中使用。

3 个答案:

答案 0 :(得分:0)

  

无法重定向到某个页面并放置状态403

答案 1 :(得分:0)

我完成了我想要的东西。方法如下:

在我的 UsersController

def authorize
    deny_access if user.not_allowed?
end

def deny_access
    flash[:danger] = "You don't have access"
    render :'users/unauthorized', status: :forbidden
end

然后,我创建了一个新文件:app/views/users/unauthorized.html.erb,其中包含以下内容:

<script type="text/javascript">
  window.location.replace("<%= users_path %>");
</script>

完成!

  1. 在未经授权的访问时返回403。
  2. 将用户重定向到正确的位置 页。
  3. flash [:danger]消息在重定向页面中可用:)

答案 2 :(得分:0)

轨道允许添加 redirect_to root_path, status: :forbidden 但是当您通过添加403状态代码进行重定向时。它将发送这样的响应 enter image description here 点击redirected后,您将继续前进。

为避免此问题,您可以使用JS渲染视图或重定向。 @Atul vaibhav提供了一个简单的解决方案。