当使用remote = true执行ajax时,Rails不保留会话数据

时间:2017-10-04 09:48:23

标签: ruby-on-rails ajax session

我正在使用rails应用程序并尝试使用rails remote执行ajax请求:true。该请求应该触发我的一个控制器操作。

<%= form_tag my_action_path(@version), {remote: true} do %>

在应用程序控制器中,有一个before_filter回调函数在执行操作之前执行。它会检查会话用户ID,如下所示:

if session[:user_id]

此检查无法强制重定向。当我检查session[:user_id]它是否为零时,我猜这意味着会话cookie未通过。我有一堆js给控制器做ajax,有趣的是他们都工作,通过检查。所以有两个问题:

我是否需要一些额外的代码才能使远程:真正的工作?有没有办法设置会话cookie或smth?

这是验证未经授权的ajax请求的正确方法,还是有更好的方法。

我正在使用Rails 4

由于

1 个答案:

答案 0 :(得分:3)

我使用设计,所以我不确定这是否可以直接应用,但是,您还必须在表单标记中传递authenticity_token

<%= form_tag my_action_path(@version), {remote: true}, authenticity_token: true do %>

它可能是独立的,但相似。我认为这对你有用。

要看的另一件事是查看一个有效的表单并查看在控制台中发布到服务器的数据,因为rails回应传递给服务器的数据,您可以使用它来帮助我们帮助您进行调试。它应该在所有会话请求中都有session_idauthenticity_token或类似内容(您在登录时执行的任何操作)。