ng-token-auth 没有坚持
ng-token-auth not persisting
我目前有一个漂亮的 bare-bones 应用程序,使用 ng-token-auth
和 rails' devise-token-auth
。 运行ning 很好并且 $auth 方法运行良好(例如,登录)。但是,在页面刷新时,access-token
不会持续存在,也不会使用 ipCookie 写入 cookie。
我的 rails 应用正在转发正确的 header,如下所示:
Access-Control-Allow-Credentials:true
Access-Control-Allow-Methods:GET, POST, DELETE, PUT, OPTIONS, HEAD
Access-Control-Allow-Origin:http://localhost
Access-Control-Expose-Headers:
Access-Control-Max-Age:0
access-token:XXXXXXXXXXXXXX
Cache-Control:max-age=0, private, must-revalidate
client:nYMXLxnuO7BIGZkdXkZ_Xg
Connection:Keep-Alive
Content-Type:application/json; charset=utf-8
Date:Sat, 09 May 2015 21:41:56 GMT
ETag:"c16291f5079691a2528d5a7876627ede"
expiry:1431294116
Keep-Alive:timeout=5, max=99
Server:Apache/2.4.10 (Unix) PHP/5.5.20
token-type:Bearer
Transfer-Encoding:chunked
uid:tester53@mailinator.com
Vary:Origin
X-Content-Type-Options:nosniff
X-Frame-Options:SAMEORIGIN
X-Request-Id:2b224904-944c-48f7-aa4e-d0407e26e893
X-Runtime:0.230242
X-XSS-Protection:1; mode=block
但是当它通过 ng-token-auth
的 updateHeadersFromResponse
方法获得 运行 时,header 返回 null——特别是在 ng-token-auth 的第 588 行.js
updateHeadersFromResponse = function($auth, resp) {
var key, newHeaders, val, _ref;
newHeaders = {};
_ref = $auth.getConfig().tokenFormat;
for (key in _ref) {
val = _ref[key];
if (resp.headers(key)) {
newHeaders[key] = resp.headers(key);
}
}
if (tokenIsCurrent($auth, newHeaders)) {
return $auth.setAuthHeaders(newHeaders);
}
};
有人遇到过这种情况吗?为什么 header 不会传递给此 $httpProvider
方法?
我在这个postAngular.js saying custom HTTP response header is null
中找到了答案
我使用的是 multi-domain 设置,因此 API 域需要在 CORS 配置中有一些额外的暴露 headers。因此,在 rails-cors gem 中,我为 access-token 添加了一个额外的暴露值:
config.middleware.insert_before 0, "Rack::Cors" do
allow do
origins 'api.com'
resource '*',
:headers => :any,
:methods => [:get, :post, :delete, :put, :options, :head],
:expose => ['access-token', 'expiry', 'token-type', 'uid', 'client'],
:max_age => 0
end
end
更新:公开了 angular 所需的所有字段,而不仅仅是使其工作的一个字段。
我目前有一个漂亮的 bare-bones 应用程序,使用 ng-token-auth
和 rails' devise-token-auth
。 运行ning 很好并且 $auth 方法运行良好(例如,登录)。但是,在页面刷新时,access-token
不会持续存在,也不会使用 ipCookie 写入 cookie。
我的 rails 应用正在转发正确的 header,如下所示:
Access-Control-Allow-Credentials:true
Access-Control-Allow-Methods:GET, POST, DELETE, PUT, OPTIONS, HEAD
Access-Control-Allow-Origin:http://localhost
Access-Control-Expose-Headers:
Access-Control-Max-Age:0
access-token:XXXXXXXXXXXXXX
Cache-Control:max-age=0, private, must-revalidate
client:nYMXLxnuO7BIGZkdXkZ_Xg
Connection:Keep-Alive
Content-Type:application/json; charset=utf-8
Date:Sat, 09 May 2015 21:41:56 GMT
ETag:"c16291f5079691a2528d5a7876627ede"
expiry:1431294116
Keep-Alive:timeout=5, max=99
Server:Apache/2.4.10 (Unix) PHP/5.5.20
token-type:Bearer
Transfer-Encoding:chunked
uid:tester53@mailinator.com
Vary:Origin
X-Content-Type-Options:nosniff
X-Frame-Options:SAMEORIGIN
X-Request-Id:2b224904-944c-48f7-aa4e-d0407e26e893
X-Runtime:0.230242
X-XSS-Protection:1; mode=block
但是当它通过 ng-token-auth
的 updateHeadersFromResponse
方法获得 运行 时,header 返回 null——特别是在 ng-token-auth 的第 588 行.js
updateHeadersFromResponse = function($auth, resp) {
var key, newHeaders, val, _ref;
newHeaders = {};
_ref = $auth.getConfig().tokenFormat;
for (key in _ref) {
val = _ref[key];
if (resp.headers(key)) {
newHeaders[key] = resp.headers(key);
}
}
if (tokenIsCurrent($auth, newHeaders)) {
return $auth.setAuthHeaders(newHeaders);
}
};
有人遇到过这种情况吗?为什么 header 不会传递给此 $httpProvider
方法?
我在这个postAngular.js saying custom HTTP response header is null
中找到了答案我使用的是 multi-domain 设置,因此 API 域需要在 CORS 配置中有一些额外的暴露 headers。因此,在 rails-cors gem 中,我为 access-token 添加了一个额外的暴露值:
config.middleware.insert_before 0, "Rack::Cors" do
allow do
origins 'api.com'
resource '*',
:headers => :any,
:methods => [:get, :post, :delete, :put, :options, :head],
:expose => ['access-token', 'expiry', 'token-type', 'uid', 'client'],
:max_age => 0
end
end
更新:公开了 angular 所需的所有字段,而不仅仅是使其工作的一个字段。