AngularJs - CORS - WithCredentials Dilemma

时间:2017-04-24 01:26:49

标签: ruby-on-rails angularjs cors

我有一个API,可以为两个应用程序提供服务,一个是移动设备,另一个是网络。

我正在使用基于令牌的身份验证来确保其安全,并且在我的网络应用程序中运行完美。但是我的移动应用程序不是。问题是,在我的网页中,我的域名与我的api相同,因此没有CORS问题。

在我的移动应用中,我需要发送我的凭据来验证用户的令牌,因为我没有相同的域不会自动发送。

app.config(['$httpProvider', function($httpProvider) {  
    $httpProvider.defaults.withCredentials = true;
  }]);

但是,如果我使用以上代码发送凭证,我就会陷入困境:

 The value of the 'Access-Control-Allow-Origin' header in the response must not be the wildcard '*' when the request's credentials mode is 'include'

因为我有这个设置:headers ['Access-Control-Allow-Origin'] ='*',其中应该是一个特定的域,但作为一个我没有的移动应用程序。

如果我删除所有CORS验证,我会收到其他错误... 我不知道该怎么做......如何面对这个问题。

我的Api是使用Ruby制作的,为了验证我正在使用此代码的身份验证:

def authenticate_current_user
    head :unauthorized if get_current_user.nil?
  end

  def get_current_user
    return nil unless cookies[:auth_headers]
    auth_headers = JSON.parse(cookies[:auth_headers])

    expiration_datetime = DateTime.strptime(auth_headers["expiry"], "%s")
    current_user = User.find_by(uid: auth_headers["uid"])

    if current_user &&
       current_user.tokens.has_key?(auth_headers["client"]) &&
       expiration_datetime > DateTime.now

      @current_user = current_user
    end
    @current_user
  end

如果我将WithCredentials设置为false,我将获得401未经授权的coz cookie [auth_headers]为空。

0 个答案:

没有答案