authentication - policies - ¿Cómo manejar múltiples estrategias de autenticación en un sails.js SPA?
sails js tutorial (2)
En la ruta de autenticación, puede buscar la autenticación basada en pasaporte.js en el backend ( sin sesión ), usar el token para tokenAuth
y reenviar el token al usuario.
Luego, para las rutas seguras, puede colocar la llamada verifyToken
en su política (interceptar cada ruta).
Descargo de responsabilidad: no lo he intentado yo mismo.
¿Cómo manejar múltiples estrategias de autenticación en un sails.js SPA?
Estoy construyendo una aplicación de una sola página basada en Angular para el front-end y sailsjs para el back-end. En este momento estoy usando sails-auth (que usa passportjs internamente) para vincular mi lógica de autenticación a mi modelo de usuario.
Tengo múltiples proveedores de pasaportes instalados y disponibles en mi interfaz, como passport-github
y passport-facebook
, pero también un passport-local
clásico passport-local
para que el usuario también pueda registrarse e ingresar con solo su nombre de usuario y contraseña.
Me gustaría que mis clientes (la aplicación de una sola página, y tal vez otros en el futuro) usen un token después de la autenticación en lugar de cookies / sesiones para que sea más fácil escalar y las solicitudes de dominio cruzado también sean más fáciles. También hará que la integración móvil sea mucho más fácil.
Sé que tengo que usar devoluciones de llamada para los proveedores de OAuth, este es el flujo que estoy buscando:
Sé que puedo reemplazar la política de sessionAuth
mi sail-auth por una política tokenAuth
que puede leer el token de los encabezados y consultar un modelo Tokens
por ejemplo, pero luego mis preguntas son:
- Cuando se utiliza el nombre de usuario / contraseña para iniciar sesión, la solicitud se puede realizar con una simple llamada AJAX, por lo que es fácil volver a pasar el token al SPA. Cuando uso proveedores como github, etc., cuando se llama a la devolución de llamada, ¿debería insertar el token dinámicamente en el HTML que estoy sirviendo?
- Las
policies/passport.js
sail-authpolicies/passport.js
muestran que, de forma predeterminada, depende de las sesiones integradas para persistir en el inicio de sesión / serializar y deserializar el ID de usuario. ¿Cómo lo desacopla de las velas de las sesiones integradas para que genere un token para el usuario y sirva mi índice con el token incrustado?
¡Gracias de antemano!
He estado usando estos pasos por un tiempo ahora.
Paso 1 (Globales): $ npm install -g velas
Paso 2 (Aplicación): $ sails new myApp
Paso 3 (archivos): copie todos los archivos en https://github.com/carlospliego/sails-token-auth-setup en su carpeta correspondiente
Paso 3A Para tener otra estrategia de autenticación solo agrega otro archivo en el directorio app / policies /
Aquí hay un ejemplo de lo que podría parecer
module.exports = function hasValidProductApiToken(req, res, next) {
if(someCondition){
next(); // Call next to continue
}
};
Paso 4 (Políticas): agregue este código a su config / policies.js
''*'': "hasToken",
UserController: {
"create": true
},
AuthController: {
''*'': true
}
Paso 5: cambie el valor de config / tokenSecret.js
Paso 6: (Dependencias)
- npm install --save pasaporte
- npm install --save pasaporte-local
- npm install --save bcrypt-nodejs
- npm install --save jsonwebtoken
- npm install --save express-jwt
Sus puntos finales se verán así:
- POST / GET / PUT / DELETE usuario /
- POST auth / login
- BORRAR auth / logout
Aquí hay una gran guía sobre cómo crear autenticación basada en tokens en velas: https://github.com/carlospliego/sails-token-auth-setup