发布到表单,说用户未登录,会话cookie存在

时间:2011-05-19 21:39:00

标签: ruby-on-rails cookies

我有一个表单,在提交时,它调用jquery .ajax请求,如:

$.ajax({
 type:"POST",
 url: "/posts/" + id + "/add_comment",
 ..
 ..
});

此网站有子域名,登录后的会话cookie如下所示:

name: __webt_session
value: ...
host: testsubdomain.lvh.me
path: /
Secure: No
Expires: At end of session

现在当我提交评论时,它不保存评论,而是重定向到登录页面(html用于登录页面,它不会'动作重定向b / c它是幕后的ajax调用)。

我的表单操作网址是否必须包含子域名?

顺便说一下,为什么会说'安全:不'

更新

我将post url设置为包含w / subdomain的完整url,并且仍然会重定向到登录页面。 为什么不拿起cookie?

当我在发布表单的页面上时,我已经登录了。该网址中包含多个子网域。必须是当我发布到页面时,出于某种原因,它认为我没有登录并重定向我(你必须登录才能发表评论)。很困惑,为什么它没有拿起饼干。

想法?

1 个答案:

答案 0 :(得分:1)

如果您的控制器操作有authenticity_token

,请确保您的帖子有导轨protect_from_forgery

在rails 3.0.x(x> 3)中如果verify_authenticity_token失败,它会将您注销,因此您的身份验证将失败。

<强>更新

要在您的javascript帖子中执行此操作,您需要添加名为authenticity_token的帖子参数。可以通过两种方式确定此参数的值:

1)在您的控制器中调用form_authenticity_token并将此值传递给javascript。

2)在你的布局中,添加这一行

<%= csrf_meta_tag %>

这会将以下内容添加到文档的头部

<meta name="csrf-param" content="authenticity_token"/> 
<meta name="csrf-token" content="Sm8z1XLTzI5HCy7+MIB+yFXiGUdS1byUHI8brHknirY="/>

您可以使用这样的小javascript来检索帖子值:

document.getElementsByName('csrf-token')[0].content

在此版本中,您可以更正确并使用

的值
document.getElementsByName('csrf-param')[0].content

确定post参数的名称

相关问题