我正试图了解 GET 和 POST 请求之间处理会话的方式的差异。
在rails中我正在设置一个带有会话变量的current_user。这适用于所有获取请求但当我执行POST时,似乎会话变量未被转移。这导致current_user = null
我猜这些照片解释得很好。
运行 GET 请求的Cookie - Working get request
不工作 POST 请求的Cookie - enter image description here
以下是我的一些代码......
Angular:版本1 - 未设置 current_user
postSomeData( id : number ){
return this._http.post( "/api/something/" + id,
JSON.stringify("{id: id}") )
.map( response => response.json() )
}
Angular:版本2 - 未设置 current_user
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
class ApplicationController < ActionController::Base
protect_from_forgery with: :null_session
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
end
答案 0 :(得分:0)
人们通常在ApplicationController或帮助器中执行类似的操作:
def set_user
unless @current_user.present?
@current_user = User.where(id: session[:user_id]).take || User.new
end
end
然后,您可以查询用户是否有任何关系或具有ID等...
答案 1 :(得分:0)
我遇到了同样的情况。原来,问题出在rails服务器上,而不是角度。
当我发出http post请求时,日志中会显示以下语句,我的会话将被终止。
警告:无法验证CSRF令牌真实性
我搜索了这个,this线程的讨论对我有帮助。
在我的控制器中添加以下行允许我发出http post请求。
skip_before_filter :verify_authenticity_token