Ruby on rails 未根据post请求维护会话,angular2,rails5

Ruby on rails 未根据post请求维护会话,angular2,rails5,ruby-on-rails,angular,session,post,get,Ruby On Rails,Angular,Session,Post,Get,我试图弄清楚get和POST请求之间会话处理方式的差异 在rails中,我使用会话变量设置当前用户。这适用于所有get请求,但当我发布帖子时,似乎会话变量没有被带入。这将导致current_user=null 我想这些照片解释得很好 工作获取请求上的Cookie- 非工作POST请求上的Cookie- 为什么呢 我必须更改angular2请求中的标题吗 rails中是否设置了允许使用POST请求的会话 这是我的一些代码 角度:版本1-未设置我的当前用户 postSomeData( i

我试图弄清楚getPOST请求之间会话处理方式的差异

在rails中,我使用会话变量设置当前用户。这适用于所有get请求,但当我发布帖子时,似乎会话变量没有被带入。这将导致
current_user=null

我想这些照片解释得很好

工作获取请求上的Cookie-

工作
POST
请求上的Cookie-

  • 为什么呢
  • 我必须更改angular2请求中的标题吗
  • rails中是否设置了允许使用POST请求的会话
这是我的一些代码

角度:版本1-未设置我的当前用户

    postSomeData( id : number ){
        return this._http.post( "/api/something/" + id,
                  JSON.stringify("{id: id}") )
                  .map( response => response.json() )
    }
postSomeData( id : number ){
   let headers = new Headers();
    headers.append('Content-Type', 'application/json');
    return this._http.post( 
    "/api/lists/private/translation/" + id, 
    JSON.stringify("{id: id}"), 
     { headers: headers, withCredentials: true } )
                .map( response => response.json() )
  }
角度:版本2-未设置我的当前用户

    postSomeData( id : number ){
        return this._http.post( "/api/something/" + id,
                  JSON.stringify("{id: id}") )
                  .map( response => response.json() )
    }
postSomeData( id : number ){
   let headers = new Headers();
    headers.append('Content-Type', 'application/json');
    return this._http.post( 
    "/api/lists/private/translation/" + id, 
    JSON.stringify("{id: id}"), 
     { headers: headers, withCredentials: true } )
                .map( response => response.json() )
  }
Rails:ApplicationController

    postSomeData( id : number ){
        return this._http.post( "/api/something/" + id,
                  JSON.stringify("{id: id}") )
                  .map( response => response.json() )
    }
postSomeData( id : number ){
   let headers = new Headers();
    headers.append('Content-Type', 'application/json');
    return this._http.post( 
    "/api/lists/private/translation/" + id, 
    JSON.stringify("{id: id}"), 
     { headers: headers, withCredentials: true } )
                .map( response => response.json() )
  }
class ApplicationController
  • Rails 5.0.0.1
  • 角度4.0.5

人们通常在应用程序控制器或助手中执行以下操作:

def set_user
  unless @current_user.present?
    @current_user = User.where(id: session[:user_id]).take || User.new
  end
end

然后,您可以查询用户是否有任何关系或ID等。

人们通常在ApplicationController或helper中执行类似操作:

def set_user
  unless @current_user.present?
    @current_user = User.where(id: session[:user_id]).take || User.new
  end
end

然后,您可以查询用户是否有任何关系或ID等。

我也遇到了同样的情况。原来问题出在rails服务器上,而不是角度

当我发出http post请求时,日志中会显示以下语句,并且我的会话会被终止

警告:无法验证CSRF令牌的真实性

我搜索了这个,关于线程的讨论确实帮助了我

在控制器中添加以下行允许我进行http post请求

skip_before_filter  :verify_authenticity_token

我面临着同样的情况。原来问题出在rails服务器上,而不是角度

当我发出http post请求时,日志中会显示以下语句,并且我的会话会被终止

警告:无法验证CSRF令牌的真实性

我搜索了这个,关于线程的讨论确实帮助了我

在控制器中添加以下行允许我进行http post请求

skip_before_filter  :verify_authenticity_token

谢谢你的回答,但我不认为这对我来说有帮助。我的问题是,在我的POST请求之后,会话[:user_id]为空,因此我无法获得所需的用户。我在描述中添加了两个图像,这很好地解释了我的问题。人们首先需要登录才能发送post请求,对吗?然后在您的应用程序控制器中,在\u操作:设置\u用户
之前添加
,这样您总是有一个
@current\u use
re:@Ealco我实际上是在原型设计,所以我没有登录功能。用户是否需要登录才能发出POST请求以保持会话?Thanx为您提供答案,但我认为在这种情况下这对我没有帮助。我的问题是,在我的POST请求之后,会话[:user_id]为空,因此我无法获得所需的用户。我在描述中添加了两个图像,这很好地解释了我的问题。人们首先需要登录才能发送post请求,对吗?然后在您的应用程序控制器中,在\u操作:设置\u用户
之前添加
,这样您总是有一个
@current\u use
re:@Ealco我实际上是在原型设计,所以我没有登录功能。用户是否需要登录才能发出POST请求以保持会话?嘿!我面临着完全相同的问题。你找到解决办法了吗?嘿!我面临着完全相同的问题。你找到解决办法了吗?这是一个伟大的见解。当时我用cookies作为临时解决方案。但我会回到这里。听起来这就是我一直在寻找的解决方案。哦,不:在过滤器之前添加跳过将使您暴露于CSRF攻击。您需要做的是使angular代码能够从rails获取CSRF令牌,并将其与post请求一起传递。不确定如何使用agular实现这一点,但也许可以将标志传递给角度代码?这是一个很好的见解。当时我用cookies作为临时解决方案。但我会回到这里。听起来这就是我一直在寻找的解决方案。哦,不:在过滤器之前添加跳过将使您暴露于CSRF攻击。您需要做的是使angular代码能够从rails获取CSRF令牌,并将其与post请求一起传递。不确定如何使用agular实现这一点,但也许可以将标志传递给angular代码?