所以这看起来很简单,但显然我无法解决这个问题。
在我的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
flash[:notice]
仍可在重定向的网址中使用。答案 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>
完成!
答案 2 :(得分:0)