Mak*_*oto 34 ruby ruby-on-rails angularjs
我目前正在与其他一些开发人员一起开发Rails应用程序,并且通过Angular通过AJAX对服务器进行了POST.有时,我们注意到InvalidAuthenticityToken我们的电子邮件日志中出现了一些例外情况,这导致我们希望采取行动.
由于此请求是通过Angular发出的,我的信念是我们将服务器视为API,我们应该使用它protect_from_forgery with: :null_session.但是,protect_from_forgery with: :reset_session似乎为我们提供了相同的分辨率.
我不想盲目地插入代码只是因为它是推荐的,所以我想知道这两种伪造保护方法之间的区别.我何时会使用其中一个,为什么我更喜欢它的使用?
Mat*_*son 50
基于我对代码的解释,似乎:
null_session应该在API样式的控制器中使用,在那里你没有使用会话对象.这听起来像是适用于Angular应用程序的解决方案.用户的预先存在的会话(即由其他传统控制器设置)将保持不变.如果您未指定with选项,它也是默认行为protect_from_forgery.reset_session适用于传统控制器.当CSRF检查失败时,它会告诉Rails吹走用户的会话并继续处理请求.这听起来像一个"偏执模式",如果有任何篡改请求,您希望将用户从您的应用程序中注销.如果你的Rails应用程序根本不使用会话,那么这些是可以互换的.
但是,如果您在应用程序的某些部分使用会话而在其他部分(即传统和API控制器的混合)中使用会话,那么null_session您可能应该使用它.否则,如果您使用reset_session,浏览器发出的API请求将导致用户退出浏览器会话.
| 归档时间: |
|
| 查看次数: |
11545 次 |
| 最近记录: |