gpt4 book ai didi

ruby-on-rails - rails 4 : How to set cookies in redirect?

转载 作者:行者123 更新时间:2023-12-01 11:33:50 24 4
gpt4 key购买 nike

我有一个 Controller ,它尝试接受表单输入,在 cookie 中设置值,然后重定向到将从该 cookie 中提取的页面。

问题是 cookie 从未在重定向 header 中设置。

注意:我已经在 Chrome 和 FF 中进行了测试。 Rails 版本是 4.0.13。设置没有重定向的 cookie 按预期工作。

这是 Controller 代码:

def create
request.cookies[:foo] = "bar"

# also tried:
# cookies[:foo]="bar"
# cookies.signed[:foo]="bar"
# cookies[:foo] = {
# value: "bar",
# expires: 1.month.from_now,
# domain: ".myapplicationhostname.com"
# }

redirect_to root_url
end

重定向的响应头不包含 Set-Cookie 属性,因此,cookie 值在重定向到路径的 Controller /操作中不可用。

我找到了一些 contradictory evidence某些浏览器不接受重定向中的 cookie,但似乎不再如此?无论如何,FF 或 Chrome 都没有显示 Set-Cookie在响应头中,所以它不会出现这是浏览器问题。

这是来自 cURL 的 header 响应,注意缺少 Set-Cookie :
HTTP/1.1 302 Moved Temporarily
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-UA-Compatible: chrome=1
Location: http://app.mydomain.com:3000/
Content-Type: text/html; charset=utf-8
Cache-Control: no-cache
X-Request-Id: 1fc1c7e5-7489-4720-bb70-28588f3abcb6
X-Runtime: 4.688166
Connection: close
Server: thin 1.6.2 codename Doc Brown

如何让 rails 在重定向时设置 cookie(或至少设置标题)?

最佳答案

看来,造成这种情况的原因实际上是 CSRF 保护。 Controller 已经实例化了一个 NullCookieJar。这可以防止在存在潜在伪造的 POST 时写入 cookie。

这是因为我的 Controller 被设置为响应异地表单,因此无法访问 CSRF token 。

因此,如果您在向 Rails 应用程序提交站外表单时遇到此问题,则需要禁用 CSRF 检查或编写自己的验证方法,如 SO 问题的答案中所述:"Receive POST from External Form" .

总结在这里:

禁用检查

skip_before_filter :verify_authenticity_token, only: :my_action

定制支票
skip_before_filter :verify_authenticity_token, :only => :my_action
before_filter :verify_custom_authenticity_token, :only => :my_action

def verify_custom_authenticity_token
# checks whether the request comes from a trusted source
end

关于ruby-on-rails - rails 4 : How to set cookies in redirect?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29577434/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com