2017-07-03 2 views
1

s'il vous plaît aidez-moi avec passportjs stratégie locale. Lorsque j'essaie de me connecter, mon flux de passeport est: serialize, Success auth et redirige vers '/' où req.user n'est pas défini. Dans le flux de passeport désérialiser est appel après chaque série, mais dans mon jamais. Je ne sais pas où est le bug, merci pour votre aide.passport.deserializeUser ne jamais appeler

exiger:

var express = require('express'); 
    var bodyParser = require('body-parser'); 
    var objection = require('objection'); 
    var Model = objection.Model; 
    var Knex = require('knex'); 
    var bcrypt = require('bcrypt'); 
    var expressValidator = require('express-validator'); 
    var passport = require('passport'); 
    var cookieParser = require('cookie-parser'); 
    var session = require('express-session'); 
    var LocalStrategy = require('passport-local').Strategy; 
    var api = express(); 

middleware Stratégie:

passport.use(new LocalStrategy(
     async function (username, password, done) { 
      var user = await User.findOne(username); 
      if (!user) { 
       return done(null, false, {message: 'Incorrect username.'}); 
      } 
      if (!bcrypt.compareSync(password, user.password)) { 
       return done(null, false, {message: 'Incorrect password.'}); 
      } else { 
       return done(null, user); 
      } 
     } 
    )); 

sérialiser un procédé de Deserialize:

passport.serializeUser(function (user, done) { 
     console.log("serialialize"); 
     done(null,user.id); 
    }); 

    passport.deserializeUser(async function (id, done) { 
     console.log("deserialialize"); 
     let user = await User.findById(id); 
     if (user) { 
      done(null, user); 
     } 
    }); 

Middlewares:

api.use((req, res, next) => { 
     res.setHeader('Access-Control-Allow-Origin', '*'); 
     res.setHeader('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept'); 
     next(); 
    }); 

    api.use(bodyParser.json()); 
    api.use(expressValidator()); 
    api.use(cookieParser()); // required before session. 
    api.use(session({secret: 'keyboard cat', resave: false, saveUninitialized: false})); 
    api.use(passport.initialize()); 
    api.use(passport.session()); 

configurations DB:

var knex = Knex({ 
     client: 'pg', 
     connection: { 
      user: 'marossmrek', 
      password: '12345', 
      database: 'ita-js' 
     } 
    }); 

    Model.knex(knex); 

    class Base extends Model { 

     static get tableName() { 
      return this.name.toLowerCase(); 
     } 

     static async findById(id) { 

      return await this.query().where({id: id}).limit(1).first(); 
     } 
    } 

    class User extends Base { 

     static async findOne(username) { 
      return await this.query().where({username: username}).limit(1).first(); 
     } 
    } 

itinéraires de connexion de l'utilisateur:

api.post('/login', 
     passport.authenticate('local', { failureRedirect: '/login' }), 
     function(req, res) { 
      console.log('Success auth'); 
      res.redirect('/'); 
     }); 

    api.get('/logout', (req, res) => { 
     req.logout(); 
     res.end(); 
    }); 

    api.get('/', (req,res)=> { 
     console.log("After redirect: " +req.user); 
     res.end(); 
    }); 

    api.listen(5000,() => { 
     console.log("I listen on port 5000"); 
    }); 

Répondre

-1

Si vous sérialisez utilisateur entier, puis désérialiser tout objet utilisateur non seulement l'identifiant.

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

passport.deserializeUser(function (user, done) { 
    done(null, user); 
}); 
+0

Comment cela se rapporte-t-il à * passport.deserializeUser jamais appeler * problème? – Green