Ruby Cuba框架CSRF:表单使用及路由传值示例讲解
Ruby Cuba框架的CSRF防护与路由传参示例
一、表单中启用CSRF防护
Cuba框架通过Cuba::Safe模块提供内置的CSRF防护支持,步骤如下:
启用相关模块
在你的Cuba应用中,先加载Cuba::Safe和模板渲染模块(以Cuba::Render为例),示例代码:require "cuba" require "cuba/safe" require "cuba/render" require "erb" Cuba.plugin Cuba::Safe Cuba.plugin Cuba::Render Cuba.define do # 路由定义写在这里 end在表单中插入CSRF令牌字段
在ERB模板里,使用csrf.form_tag辅助方法,它会自动生成包含CSRF令牌的隐藏input字段。示例表单:<form action="/submit" method="POST"> <%= csrf.form_tag %> <input type="text" name="content" placeholder="输入内容"> <button type="submit">提交</button> </form>渲染后生成的HTML会包含类似这样的隐藏字段:
<input type="hidden" name="_csrf" value="随机生成的CSRF令牌字符串">自动验证机制
当处理POST/PUT/DELETE等非GET请求时,Cuba::Safe会自动校验请求中的CSRF令牌是否与会话中的令牌匹配。不匹配时直接返回403 Forbidden响应,无需手动编写验证逻辑。
二、向路由传递数据的简单示例
1. 动态路由参数传递
通过定义带占位符的路由,直接获取URL中的参数:
Cuba.define do # 渲染表单页面 on get, "form" do res.write render("form.erb") end # 接收表单提交的POST请求,获取表单参数 on post, "submit" do content = req.params["content"] res.write "你提交的内容是:#{content}" end # 动态路由:传递用户ID参数 on get, "user/:id" do |user_id| res.write "当前查看的用户ID:#{user_id}" end end
2. 向模板传递数据
如果需要在路由中处理数据后传递给模板渲染,可通过局部变量实现:
# 路由定义 on get, "greet/:name" do |name| res.write render("greet.erb", name: name) end # greet.erb模板内容 <h1>你好,<%= name %>!</h1>
内容的提问来源于stack exchange,提问作者user29559775
相关产品推荐
相关产品推荐

