4

我有一个具有 2 个子域的 rails 应用程序:

  • API (CORS) =>api.myapp.dev
  • 网络应用程序=>myapp.dev

我只能通过auth_token使用 Devise 进行用户身份验证后立即返回的 API 访问。但是,我的客户端(网络应用程序)没有设置这些 cookie。我错过了什么吗?

class Api::V1::SessionsController < Api::V1::BaseController

  def create
    @user = User.find_for_database_authentication(:email => params[:user][:email])

    if @user and @user.valid_password?(params[:user][:password])
      sign_in @user # Set-Cookie header response with the session
      render "api/v1/users/preview", :handlers => :rabl # return auth_token here
    else
      flash[:error] = I18n.t('devise.failure.invalid')
      render "api/v1/base/error", :handlers => :rabl, :status => :unprocessable_entity 
    end
  end
end
4

1 回答 1

1

出于安全原因,您不能从跨域网站设置 cookie。但是,jQuery.ajax让我们通过显式设置以下选项来做到这一点:

$.ajax
  type: "POST"
  url: "api.mydomain.com/login"
  xhrFields:
    withCredentials: true

此外,请确保headers['Access-Control-Allow-Credentials'] = "true"从您的 HTTP 响应中返回。

于 2012-08-16T18:24:47.653 回答