javascript - docs - ng-token-auth no persiste
devise>- token auth (1)
Tengo una aplicación muy básica en este momento usando ng-token-auth
y carriles '' devise-token-auth
. Está funcionando bien y los métodos $ auth están funcionando bien (por ejemplo, iniciando sesión). Sin embargo, al actualizar la página, el access-token
no se conserva y no se escribe en la cookie con ipCookie.
La aplicación My rails está reenviando los encabezados adecuados como se ve a continuación:
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:[email protected]
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
Pero cuando se ejecuta a través del método updateHeadersFromResponse
de ng-token-auth
los encabezados devuelven null-- específicamente en las líneas 588 de ng-token-auth.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);
}
};
¿Alguien ha encontrado esto? ¿Por qué no se pasaría el encabezado a este método $httpProvider
?
Encontré la respuesta en esta publicación de Angular.js diciendo que el encabezado de respuesta HTTP personalizado es nulo
Estaba usando una configuración de varios dominios, por lo que el dominio de la API necesitaba tener algunos encabezados adicionales expuestos en la configuración de CORS. Entonces en la gema rails-cors agregué un valor expuesto adicional para el token de acceso:
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
ACTUALIZACIÓN: Expuse todos los campos requeridos por angular, no solo uno que lo hizo funcionar.