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

Cor*_*len 9 cookies json ruby-on-rails

如何在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
Run Code Online (Sandbox Code Playgroud)

路线:

Rails.application.routes.draw do

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

end
Run Code Online (Sandbox Code Playgroud)

cia*_*ben 15

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

response.set_cookie "name", "nic"
Run Code Online (Sandbox Code Playgroud)

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

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

skip_before_action :verify_authenticity_token
Run Code Online (Sandbox Code Playgroud)

  • 你是我的英雄! (2认同)
  • 确保设置`path = /` (2认同)