无法调用Passport本地策略

时间:2018-03-09 21:54:10

标签: node.js mongodb express angular5 passport-local

我是Angular 5的初学者,我目前正在开发一款应用。所以在登录模块中,护照本地策略不起作用而且passport.authenticate功能不起作用,我似乎无法在我的代码中找到问题。

现在我不确定是什么问题,因为控制台上没有错误,每次返回都是null。这就是为什么我要复制粘贴大量代码的原因。

代码附于下方。

Server.js文件

const express = require('express');
const bodyParser = require('body-parser');
const path = require('path');
const http = require('http');
const cors = require('cors');
const app = express();
const cookieParser = require('cookie-parser');
const exphbs = require('express-handlebars');
const expressValidator = require('express-validator');
const flash = require('connect-flash');
const session = require('express-session');
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;

// API file for interacting with MongoDB
const api = require('./routes/api');
const auth = require('./routes/auth_companies');

require('./models/passport');

// Parsers/middlewares
app.use(cors());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));
app.use(cookieParser());

app.use(flash());

// Angular DIST output folder
app.use(express.static(path.join(__dirname, 'dist')));
app.use(express.static('public'));

// API location
app.use('/api', api);
app.use('/auth', auth);
// Express Session
app.use(session({
secret: 'secret',
saveUninitialized: true,
resave: true
}));

// Passport init
app.use(passport.initialize());
app.use(passport.session());

// Express Validator
app.use(expressValidator({
errorFormatter: function(param, msg, value) {
  var namespace = param.split('.')
  , root    = namespace.shift()
  , formParam = root;

while(namespace.length) {
  formParam += '[' + namespace.shift() + ']';
 }
return {
  param : formParam,
  msg   : msg,
  value : value
};
}
}));

// Connect Flash
app.use(flash());

// Global Vars
app.use(function (req, res, next) {
res.locals.success_msg = req.flash('success_msg');
res.locals.error_msg = req.flash('error_msg');
res.locals.error = req.flash('error');
res.locals.user = req.user || null;
next();
});

// Send all other requests to the Angular app
//app.get('*', (req, res) => {
// res.sendFile(path.join(__dirname, 'dist/index.html'));
//});

// start the server
//app.listen(app.get('port'), () => {
// console.log('server on port 3000');
//}); 


//Set Port
const port = process.env.PORT || '3000';
app.set('port', port);

const server = http.createServer(app);
console.log(port);
server.listen(port, () => console.log(Running on localhost:${port}));

Passport.js文件

        const express = require('express');
    const router = express.Router();
    const passport = require('passport');
    const LocalStrategy = require('passport-local').Strategy;

    const User = require ('./reg_company');

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

    passport.deserializeUser(function(id, done) {
      User.getUserById(id, function(err, user) {
        done(err, user);
      });
    });

    passport.use( new LocalStrategy(
      function(email, password, done) {
        console.log('9900---------------------------------', email)
       User.getUserByEmail(email, function(err, user){
        if(err) throw err;
        if(!user){
          return done(null, false, {message: 'Unknown User'});
        }

        User.comparePassword(password, user.password, function(err, isMatch){
          if(err) throw err;
          if(isMatch){
            return done(null, user);
          } else {
            return done(null, false, {message: 'Invalid password'});
          }
        });
       });
      }));

    passport.use('local.signup' , new LocalStrategy ({
      passReqToCallback : true ,
      emailfield:'email',
      passwordfield:'password'
    }, function(req, email, password, done){
      User.findOne({'email':email}, function(err, user){
        if (err)
        {
          return done(err);
        }

        if (user)
        {
          return done (null, false);
        }

        const newCompany=new User();
        newCompany.email = req.body.email;
        newCompany.password = req.body.passport;

        User.createUser(newCompany, function(err, user){
          if(err) throw err;
          console.log(user);
          return done(null, user);
        });

      })
    }) )

Mongo文件

        const mongoose = require('mongoose');
    const uri='mongodb://localhost/tourhubdb';
    mongoose.connect(uri);
    const db=mongoose.connection;
    const bcrypt = require('bcryptjs');

    //tourist Schema
    let company_reg_schema = mongoose.Schema({
        email:{
            type:String,
            require:true
        },
        password:
        {
            type:String,
            require:true
        }
    });

    let User = module.exports = mongoose.model('companies',company_reg_schema);

    module.exports.createUser = function(newUser, callback){
      bcrypt.genSalt(10, function(err, salt) {
          bcrypt.hash(newUser.password, salt, function(err, hash) {
              newUser.password = hash;
              newUser.save(callback);
          });
      });
    }

    module.exports.getUserByEmail = function(email, callback){
      var query = {email: email};
      User.findOne(query, callback);
    }

    module.exports.getUserById = function(id, callback){
      User.findById(id, callback);
    }

    module.exports.comparePassword = function(candidatePassword, hash, callback){
      bcrypt.compare(candidatePassword, hash, function(err, isMatch) {
          if(err) throw err;
          callback(null, isMatch);
      });
    }

路由文件

        const express = require("express");
    const router = express.Router();

      router.post('/login',function (req,res,next){
      passport.authenticate('local-login', function (err ,user ,info){
      })(req ,res ,next);
      });



      module.exports = router;

1 个答案:

答案 0 :(得分:0)

这里只有我的两分钱......无论你在哪里回归(null ....)    passport.use(),您可以为不同的done()调用替换不同错误的null值,并查看调用哪个以及为什么。