我有一个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]为空。