说,我有一个网址来编辑帖子 ... / posts / 1 / edit
当用户将其粘贴到浏览器上时,我不希望此URL导航到链接。但是,如果我在应用程序中有一个指向此URL的链接,则应用程序应该路由到此URL。
是否有可能实现这样的目标?
我在应用程序中没有身份验证系统。
我只是想看看它是否有一个优雅的解决方案。否则,我相信我可以找到方法。感谢。
答案 0 :(得分:3)
使用request.referer
获取用户来自的页面。这应该可以让你实现你想要的。请注意,这不是100%可靠,有时可能未设置referer标头。但在大多数情况下它会起作用。
或者,您可以设置一个会话变量,指示是否允许用户打开页面(使用session[:allowed] = true
在主页面上设置会话变量,检查其在隐藏页面上的存在) 。当用户没有设置会话变量时,渲染错误或重定向到主页面(类似render :status=>403 and return unless session[:allowed]
)。
答案 1 :(得分:1)
其中一种简单的方法是使用GET请求发送一个唯一的标头,并在编辑页面中确保验证此标头,并且只有当它存在时才继续,否则抛出401。
为了使它更简单,发送一个独特的参数,如/ posts / 1 / edit?application =“not-browser-1234”
并在编辑页面
如果$ _GET [application]!=“not-browser-1234” 出口