¿Hay alguna biblioteca de autenticación de usuario existente para node.js? En particular, estoy buscando algo que pueda hacer la autenticación de contraseña para un usuario (usando una base de datos de autenticación de back-end personalizada) y asociar a ese usuario con una sesión.
Antes de escribir una biblioteca de autenticación, pensé que vería si la gente supiera de las bibliotecas existentes. No se pudo encontrar nada obvio a través de una búsqueda en Google.
-Shreyas
omniauth
(rails) o pythonsocial-auth
. Los usuarios de PHP (y otros lenguajes de servidor web comunes) también deben sentirse libres de agregar su equivalente.Respuestas:
Si está buscando un marco de autenticación para Connect o Express, vale la pena investigar Passport: https://github.com/jaredhanson/passport
(Divulgación: soy el desarrollador de Passport)
Desarrollé Passport después de investigar tanto connect-auth como everyauth. Si bien ambos son excelentes módulos, no se adaptaron a mis necesidades. Quería algo que fuera más liviano y discreto.
El pasaporte se divide en módulos separados, por lo que puede elegir usar solo lo que necesita (OAuth, solo si es necesario). Passport tampoco monta ninguna ruta en su aplicación, lo que le brinda la flexibilidad de decidir cuándo y dónde desea la autenticación, y los ganchos para controlar lo que sucede cuando la autenticación tiene éxito o falla.
Por ejemplo, este es el proceso de dos pasos para configurar la autenticación basada en formularios (nombre de usuario y contraseña):
Hay estrategias adicionales disponibles para la autenticación a través de Facebook, Twitter, etc. Las estrategias personalizadas se pueden conectar, si es necesario.
fuente
done(null,false,{ message:'Incorrect username.' })
es terrible ya que no sabemos cuáles son todos esos parámetros.Sesión + Si
Supongo que la razón por la que no ha encontrado muchas bibliotecas buenas es que el uso de una biblioteca para la autenticación está sobredimensionado.
Lo que está buscando es solo una carpeta de sesión :) Una sesión con:
Eso es.
No estoy de acuerdo con su conclusión de que el complemento connect-auth es el camino a seguir.
También estoy usando connect pero no uso connect-auth por dos razones:
En mi humilde opinión, connect-auth es la arquitectura de conexión de anillo de cebolla muy potente y fácil de leer. Un no-go - mi opinión :). Puede encontrar un artículo muy bueno y breve sobre cómo funciona connect y la idea del anillo de cebolla aquí .
Si usted, como está escrito, solo quiere usar un inicio de sesión básico o http con una base de datos o un archivo. Connect-auth es demasiado grande. Es más para cosas como OAuth 1.0, OAuth 2.0 & Co
Una autenticación muy simple con connect
(Está completo. Simplemente ejecútelo para la prueba, pero si desea usarlo en producción, asegúrese de usar https) (Y para cumplir con el Principio REST, debe usar una Solicitud POST en lugar de una Solicitud GET b / c cambias un estado :)
NOTA
Escribí esta declaración hace más de un año y actualmente no tengo proyectos de nodos activos. Por lo tanto, puede haber cambios de API en Express. Agregue un comentario si debo cambiar algo.
fuente
Parece que el complemento connect-auth para conectar el middleware es exactamente lo que necesito: http://wiki.github.com/ciaranj/connect-auth/creating-a-form-based-strategy
Estoy usando express [ http://expressjs.com ] por lo que el complemento de conexión encaja muy bien ya que express está subclasificado (ok - prototipo) de connect
fuente
Básicamente estaba buscando lo mismo. Específicamente, quería lo siguiente:
Lo que terminé haciendo fue crear mi propia función de middleware
check_auth
que paso como argumento a cada ruta que quiero autenticar.check_auth
simplemente verifica la sesión y, si el usuario no ha iniciado sesión, los redirige a la página de inicio de sesión, de la siguiente manera:Luego, para cada ruta, me aseguro de que esta función se pase como middleware. Por ejemplo:
Finalmente, necesitamos manejar el proceso de inicio de sesión. Esto es sencillo:
En cualquier caso, este enfoque fue diseñado principalmente para ser flexible y simple. Estoy seguro de que hay numerosas formas de mejorarlo. Si tiene alguno, me gustaría mucho su opinión.
EDITAR: Este es un ejemplo simplificado. En un sistema de producción, nunca querrás almacenar y comparar contraseñas en texto plano. Como señala un comentarista, hay bibliotecas que pueden ayudar a administrar la seguridad de la contraseña.
fuente
También eche un vistazo a everyauth si desea la integración de inicio de sesión de redes sociales / de terceros.
fuente
Aquí hay un código para la autenticación básica de uno de mis proyectos. Lo uso contra CouchDB con caché de datos de autenticación adicional, pero eliminé ese código.
Envuelva un método de autenticación alrededor de su manejo de solicitudes y proporcione una segunda devolución de llamada para una autenticación fallida. La devolución de llamada exitosa obtendrá el nombre de usuario como un parámetro adicional. No olvide manejar correctamente las solicitudes con credenciales incorrectas o faltantes en la devolución de llamada fallida:
fuente
Una versión diferente de la autenticación es Passwordless, un módulo de autenticación basado en token para express que evita el problema inherente de las contraseñas [1]. Es rápido de implementar, no requiere demasiados formularios y ofrece una mayor seguridad para el usuario promedio (divulgación completa: soy el autor).
[1]: las contraseñas son obsoletas
fuente
Han pasado algunos años y me gustaría presentar mi solución de autenticación para Express. Se llama Lockit . Puedes encontrar el proyecto en GitHub y una breve introducción en mi blog .
Entonces, ¿cuáles son las diferencias con las soluciones existentes?
require('lockit')
,lockit(app)
, hechousername
ypassword
.Echa un vistazo a los ejemplos .
fuente
Hay un proyecto llamado Drywall que implementa un sistema de inicio de sesión de usuario con Passport y también tiene un panel de administración de administración de usuarios. Si está buscando un sistema de autenticación y administración de usuarios con todas las funciones similar a algo como lo que Django tiene pero para Node.js, este es el lugar. Me pareció un buen punto de partida para crear una aplicación de nodo que requiriera un sistema de autenticación y gestión de usuarios. Consulte la respuesta de Jared Hanson para obtener información sobre cómo funciona Passport.
fuente
Aquí hay dos bibliotecas populares de Github para la autenticación de nodo js:
https://github.com/jaredhanson/passport (sugerible)
https://nodejsmodules.org/pkg/everyauth
fuente
Ejemplo simple y rápido con mongo, para una API que proporciona autenticación de usuario para clientes angulares
en app.js
para su ruta algo como esto:
Luego, en las rutas que requieren autenticación, puede verificar la sesión del usuario:
fuente
Aquí hay una nueva biblioteca de autenticación que usa tokens con marca de tiempo. Los tokens pueden enviarse por correo electrónico o por mensaje de texto a los usuarios sin la necesidad de almacenarlos en una base de datos. Se puede usar para la autenticación sin contraseña o para la autenticación de dos factores.
https://github.com/vote539/easy-no-password
Divulgación: soy el desarrollador de esta biblioteca.
fuente
Si necesita autenticación con SSO (inicio de sesión único) con la cuenta de usuario de Microsoft Windows. Puede intentar https://github.com/jlguenego/node-expose-sspi .
Le dará un
req.sso
objeto que contiene toda la información del usuario del cliente (inicio de sesión, nombre para mostrar, sid, grupos).Descargo de responsabilidad: soy el autor de node-expose-sspi.
fuente
dulce-auth
Un módulo de autenticación de usuario ligero y de configuración cero. No necesita una base de datos sperate.
https://www.npmjs.com/package/sweet-auth
Es simple como:
fuente