📜  rails skip 真实性令牌 - Ruby (1)

📅  最后修改于: 2023-12-03 15:34:36.679000             🧑  作者: Mango

Rails 中跳过真实性令牌

在 Rails 中,真实性令牌是一种防止 CSRF 攻击的安全机制。然而,在某些情况下,我们需要跳过这种令牌验证,例如在测试环境中或者通过 API 发送请求时。本文将介绍在 Rails 中如何跳过真实性令牌验证。

跳过一次验证

我们可以在控制器中使用 skip_before_action 方法来跳过一次真实性令牌验证。例如,下面的代码将跳过一次 verify_authenticity_token

class MyController < ApplicationController
  skip_before_action :verify_authenticity_token, only: [:my_action]
  
  def my_action
    # ... your code here ...
  end
end

在上面的例子中,我们只在 my_action 方法中跳过了一次验证。如果你想跳过多个方法的验证,可以像下面这样使用 only 参数:

class MyController < ApplicationController
  skip_before_action :verify_authenticity_token, only: [:my_action1, :my_action2]
  
  def my_action1
    # ... your code here ...
  end
  
  def my_action2
    # ... your code here ...
  end
end
跳过所有验证

如果你想在控制器中跳过所有真实性令牌验证,可以在控制器类中使用 protect_from_forgery 方法,并指定 with: :null_session 或者 with: :exception 参数。

class MyController < ApplicationController
  protect_from_forgery with: :null_session
  
  # ... your code here ...
end

在上面的例子中,我们设置了 with: :null_session,表示跳过所有真实性令牌的验证,并使用空会话来代替。

如果你想使用异常来代替空会话,可以设置 with: :exception 参数:

class MyController < ApplicationController
  protect_from_forgery with: :exception
  
  # ... your code here ...
end
推荐做法

虽然我们可以在控制器中跳过真实性令牌的验证,但在某些情况下这可能会导致安全问题。因此,建议在跳过验证时要非常小心,并遵循以下几点建议:

  • 只在必要的情况下跳过验证。
  • 仅在受信任的环境中跳过验证,例如测试环境。
  • 如果在公共接口中使用 Rails,最好保留验证机制。
结论

在 Rails 中跳过真实性令牌验证很容易,只需使用 skip_before_action 方法或 protect_from_forgery 方法。但在跳过验证时要非常小心,并遵循最佳实践,以确保应用程序的安全性。