2012-06-10 54 views
7

(código actualizado con funciones de serialización - todavía redirige a/failedRedirect)Node.js autenticación del usuario mediante el pasaporte

estoy tratando de conseguir autenticación simple nombre de usuario/contraseña va utilizando el paquete de pasaporte, pero no. En el siguiente ejemplo, he intentado verificar que la autenticación funciona, básicamente siempre devolviendo una autenticación válida (independientemente de lo que se aprueba), pero por alguna razón falla y el pasaporte redirige al enlace de inicio de sesión fallido.

Si alguien me puede ayudar a descubrir cómo hacer que este ejemplo simplemente autentique algo, debería ser capaz de gestionar desde allí.

El código en CoffeeScript es:

express = require "express" 
passport = require "passport" 
LocalStrategy = require("passport-local").Strategy 

passport.use(new LocalStrategy((username, password, done) -> 
    console.log "LocalStrategy invoked" 
    done(null, {id: 1, name: "Marius"}) 
)) 

passport.serializeUser (user, done) -> 
    done null, user 

passport.deserializeUser (obj, done) -> 
    done null, obj 

app = express.createServer() 

app.configure -> 
    app.use express.bodyParser() 
    app.use express.static("./public") 
    app.use express.cookieParser("SOMESECRET") 
    app.use express.session 
    secret: "SOMESECRET" 
    cookie: 
     maxAge: 60000 
    app.use passport.initialize() 
    app.use passport.session() 
    app.set "view", "./srv/views" 
    app.set "view engine", "jade" 

app.get "/login", (req, res) -> 
    res.send "login page" 

app.post "/login", passport.authenticate("local", 
    failureRedirect: "/failedRedirect" 
    successRedirect: "/successRedirect" 
    failureFlash: true) 

app.listen 8082 

Resuelto: Ok, creo que había algunas razones por las que no pude conseguir que funcione. El material serializado puede ser uno (no lo he probado), pero como Jared dijo que eran necesarios, los dejo (es el autor de Passport). La otra confusión puede estar relacionada con versiones expresas y mi confusión con npm. Creo que probé la última v2 de Express, pero también probé v3, que ahora estoy ejecutando. Para la versión tres, probablemente también deberías consultar el módulo connect-flash en Github, ya que algunas de las cosas "flash" que se usan en los ejemplos de Jared se quitaron de v3 (así que el módulo lo vuelve a poner ...). Y, por último, asegúrese de publicar utilizando los nombres de entrada con el nombre adecuado (username y password de forma predeterminada).

Respuesta

11

Me parece que le falta la lógica de serialización de usuario necesaria para establecer una sesión de inicio de sesión. Si añado estas dos funciones para el código JavaScript, funciona:

passport.serializeUser(function(user, done) { 
    done(null, user); 
}); 

passport.deserializeUser(function(obj, done) { 
    done(null, obj); 
}); 

Usted querrá serializar los usuarios de acuerdo a sus necesidades. Los detalles se encuentran en la parte inferior de esta página: http://passportjs.org/guide/configuration.html

+0

Código actualizado en cuestión para incluir el funciones de serialización, pero la autenticación aún falla en mi extremo. ¿Se autentica el código actualizado con éxito al final? Gracias .. –

+0

Sí, lo hace. ¿Su código imprime el mensaje "LocalStrategy invocado"? Puede ser útil montar 'app.use (express.errorHandler ({dumpExceptions: true, showStack: true}));' y ver si se producen excepciones. –

+0

En mi extremo, incluso el mensaje "invocado" no se muestra. Voy a probar tu error con el gestor para ver si aparece algo. –

9

Los nombres de las publicaciones posteriores suelen ser los más importantes para las personas que veo que tienen problemas con la estrategia local de contraseñas. Probablemente debería ser grande y audaz en la documentación, y probablemente debería haber valores de configuración para cambiarlos.

+0

Parece que hay valores de configuración para cambiarlos, ahora. Abajo de esta página: http://passportjs.org/guide/username-password/ –

+0

Sí, este me mordió en el trasero durante dos días. – darethas

1

que he hecho succsessfully desde este enlace http://danialk.github.io/blog/2013/02/23/authentication-using-passportjs/ descarga de código de ejemplo https://github.com/DanialK/PassportJS-Authentication ubicación se requiere

Sólo un cambio en routes.js código cambio

app.post("/login" ,passport.authenticate('local',{successRedirect : "/",failureRedirect : "/login", })); 

Para ------ ------------------------

app.post("/login" ,passport.authenticate('local',{failureRedirect : "/login"}), function(req,res){ res.render('your home page here', {user : req.user });}); 
Cuestiones relacionadas