4

2 つのサブドメインを持つ Rails アプリがあります。

  • API (CORS) =>api.myapp.dev
  • ウェブアプリ=>myapp.dev

auth_tokenDeviseを使用したユーザー認証の直後に返されるAPIにのみアクセスできます。ただし、クライアント (Web アプリ) はこれらの 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

セキュリティ上の理由から、クロスドメイン Web サイトから 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 に答える