无法使用通行证

时间:2019-02-23 13:24:54

标签: javascript node.js mongodb passport.js

我正在节点js中配置登录系统,但我试图在登录日志后显示未定义

来获取用户详细信息

这里是app.js

const express = require('express');
 const session = require('express-session');
 const mongoose = require('mongoose');
 const passport = require('passport');
 const bodyParser = require('body-parser');
 const app = express();

 //Passport Config
 require('./config/passport')(passport);

 //DB config
 const db= require('./config/key').dbURI;

 //Connect to mongodb
 mongoose.connect(db,{ useNewUrlParser: true})
.then(() => console.log('MongoDB Connected...'))
.catch(err => console.log(err));

 //ejs
  app.set('view engine','ejs');

 //Bodyparser
 app.use(bodyParser.json());
 app.use(express.urlencoded({ extended: false }));

  //Express session
   app.use(session({
   secret: 'secret key',
   resave: true,
   saveUninitialized: true
   }));

    //passport middleware
    app.use(passport.initialize());
    app.use(passport.session());


     //Routes
     app.use('/', require('./routes/index'));
     app.use('/users', require('./routes/users'));
     app.listen(3000,console.log("Server started on 3000"));

这是我的登录系统

router.post('/login', (req,res,next) => {
passport.authenticate('local',{
  successRedirect: '/dashboard',
  failureRedirect: '/users/login',
  failureFlash: true
})(req,res,next);
 });

这是我的仪表板重定向代码

route.get('/dashboard',ensureAuthenticated,(req,res) => {
console.log(req.admin);
res.render('dashboard', { admin : req.admin });
});

在此console.log(req.admin);中,它在日志中表示未定义

这是护照配置

const LocalStrategy = require('passport-local').Strategy;
const mongoose = require('mongoose');
const bcrypt = require('bcryptjs');
const passport = require('passport');

//Load user model
 const User = require('../models/admin');

module.exports=function(passport){
passport.use(
  new LocalStrategy({ usernameField: 'email' }, (email,password,done) =>         {
    //Check if user is available or not
    User.findOne({ email: email })
    .then(user => {
      if(!user){
        return done(null, false, console.log('That email is not registerd'));

      }

      //match password
      bcrypt.compare(password, user.password, (err, isMatch) => {
        if(err) throw err;
        if(isMatch){
          return done(null, user);
        }else{
          return done(null, false, console.log('Password Incorrect'));

        }
      });
    })
    .catch(err => console.log(err));
    })
  );


   passport.serializeUser((user, done) => {
   done(null, user.id);
    });
   passport.deserializeUser((id, done) => {
   User.findById(id, (err, user) => {
   done(err, user);
   });
    });
    }

这是auth.js

的代码
module.exports = {
ensureAuthenticated: function(req,res,next){
if(req.isAuthenticated()){
  return next();
}
console.log('Please log in to view this resourse');
res.redirect('/users/login');
}
}

,在dashboard.ejs中,我使用的是<%= admin.name %>,它给出了错误 无法读取未定义的属性“名称”

我不知道这是怎么回事,或者我在这里想念什么

2 个答案:

答案 0 :(得分:0)

在passport.js中成功认证后,通过护照中间件在请求中将使用过的etaeta分配给“用户”对象。 因此您可以使用“ req.user”进行访问。

答案 1 :(得分:0)

error

在初始化策略时包含 new 关键字。 solution