会话未按发布请求维护,angular2,rails5

时间:2017-03-12 21:40:30

标签: ruby-on-rails angular session post get

我正试图了解 GET POST 请求之间处理会话的方式的差异。

在rails中我正在设置一个带有会话变量的current_user。这适用于所有获取请求当我执行POST时,似乎会话变量未被转移。这导致current_user = null

我猜这些照片解释得很好。

运行 GET 请求的Cookie - Working get request

工作 POST 请求的Cookie - enter image description here

  • 为什么?
  • 我是否必须更改angular2请求中的标题?
  • 是否允许使用POST请求进行会话。

以下是我的一些代码......

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
  • Rails 5.0.0.1
  • Angular 4.0.5

2 个答案:

答案 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