Ruby on rails 未根据post请求维护会话,angular2,rails5
我试图弄清楚get和POST请求之间会话处理方式的差异 在rails中,我使用会话变量设置当前用户。这适用于所有get请求,但当我发布帖子时,似乎会话变量没有被带入。这将导致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
current_user=null
我想这些照片解释得很好
工作获取请求上的Cookie-
非工作POST请求上的Cookie-
- 为什么呢李>
- 我必须更改angular2请求中的标题吗
- rails中是否设置了允许使用POST请求的会话
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代码?