我有一个有2个子域的rails应用程序:
api.myapp.dev
myapp.dev
我只能通过auth_token
访问我的API,这是在用户使用Devise进行身份验证后立即返回的。但是,我的客户端(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
答案 0 :(得分:1)
出于安全原因,您无法从跨域网站设置Cookie。但是,jQuery.ajax
允许您通过明确设置以下选项来执行此操作:
$.ajax
type: "POST"
url: "api.mydomain.com/login"
xhrFields:
withCredentials: true
另外,请务必从HTTP响应中返回headers['Access-Control-Allow-Credentials'] = "true"
。