Rails 4:如果type是JSON,请在请求/响应中设置cookie?

时间:2015-02-19 23:26:15

标签: ruby-on-rails json cookies

如何在Rails中响应application / json类型的请求时设置cookie?

控制器操作按预期工作,但没有设置cookie,并且响应中没有Set-Cookie标头。任何帮助将不胜感激。

控制器:

class SessionsController < ApplicationController

    def create
        @user = User.find_by(email: params[:session][:email].downcase)
        if user && user.authenticate(params[:session][:password])
            log_in(user)
            .
            .
            cookies[:test] = 'Test cookie'

            render json: @user
            #render json: @user, set_cookie: 'test' #Also tried this
        else
            render text: 'Wrong username and/or password', status: 401
        end
    end

end

路线:

Rails.application.routes.draw do

    .
    .
    resources :sessions, :defaults => { :format => :json }

end

1 个答案:

答案 0 :(得分:14)

我遇到了同样的问题。 以下是我的解决方法:

response.set_cookie "name", "nic"

我也想出了问题的原因。伪造保护在响应组合之前使会话无效。

要使用cookies方法,您需要跳过令牌的验证验证:

skip_before_action :verify_authenticity_token