Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js NodeJS PassportJS提供特定密码_Node.js_Express_Passwords - Fatal编程技术网

Node.js NodeJS PassportJS提供特定密码

Node.js NodeJS PassportJS提供特定密码,node.js,express,passwords,Node.js,Express,Passwords,我正在做一个管理员,将要求只是为某个护照。 但当我输入它时,我无法登录?我怎样才能解决它 const mongoose = require('mongoose'); const UserSchema = mongoose.Schema({ password:{ type: String, required: true } }); const User = module.exports =

我正在做一个管理员,将要求只是为某个护照。 但当我输入它时,我无法登录?我怎样才能解决它

 const mongoose = require('mongoose');
    const UserSchema = mongoose.Schema({
        password:{
            type: String,
            required: true
          }
    });
    const User = module.exports = mongoose.model('User', UserSchema);
在我的命令行中,我创建了一个users collectin并插入了一个密码:“sifre”

这是我的密码。js:

const LocalStrategy = require('passport-local').Strategy;
const User = require('../models/user');
const config = require('../config/database');
const bcrypt = require('bcryptjs');

module.exports = function(passport){
  // Local Strategy
  passport.use(new LocalStrategy(function(password){

    let query = {password:password};
    User.findOne(query, function(err, user){
      if(err) throw err;
      if(!user){
        return done(null, false, {message: 'No user found'});
      }


  /*Also I have tried:
    // Match Username
    let query = {username:username};
    User.findOne(query, function(err, user){
      if(err) throw err;
      if(!user){
        return done(null, false, {message: 'No user found'});
      } */


    /* to understand if it is about user name. Even I added username to models, db.collections 
and other code pages but I couldnt solve. Because again
 I couldnt reflect the models to db, I think.*/

      // Match Password
      bcrypt.compare(password, user.password, function(err, isMatch){
        if(err) throw err;
        if(isMatch){
          return done(null, user);
        } else {
          return done(null, false, {message: 'Wrong password'});
        }
      });
    });
  }));

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

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

  });
}
这也是我的user.js:

    const express = require("express");
const router = express.Router();
const bcrypt = require('bcryptjs');
const passport = require('passport');

let User = require('../models/user');

// Register Form
router.get('/login', function(req, res){
    const password = req.body.password;
    req.checkBody('password', 'Password is required').notEmpty();

    let errors = req.validationErrors();

    res.render('login');
  });

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

  // logout
  router.get('/logout', function(req, res){
    req.logout();
    req.flash('success', 'You are logged out');
    res.redirect('/login');
  });

  module.exports = router; 
这也是我的命令行

db.createCollection('users');
...
db.users.insert{(password:'123'});
...
那么,如何将插入的密码实现到这些代码块中呢。我不明白它为什么不起作用。目前我没有收到任何错误,但当我键入插入的密码时,我无法移动到用户页面

编辑:

此部件不工作。(位于passport.js中)


此外,我无法将模块(user.js)升级到我的mongodb。

您遇到了什么错误?我编辑过,您能再看一下吗?从客户端键入并提交您的密码后,您能确认密码本地策略已执行吗?如果它被执行,那么
User.findOne
query的输出是什么?我认为User.Find工作正常,但是bcyrtp.password(..)部分不工作。当我使用console.log尝试代码时(找到用户名)-(找到密码)。它显示在npm控制台中找到了用户名,但没有显示找到了密码。您遇到了什么错误?我编辑过,您能再看一下吗?从客户端键入并提交您的密码后,您能确认密码本地策略已执行吗?如果它被执行,那么
User.findOne
query的输出是什么?我认为User.Find工作正常,但是bcyrtp.password(..)部分不工作。当我使用console.log尝试代码时(找到用户名)-(找到密码)。它显示在npm控制台中找到用户名,但不显示找到密码。
          bcrypt.compare(password, user.password, function(err, isMatch){
        console.log("asd");
        if(err) throw err;
        if(isMatch){
          return done(null, user);
        } else {
          return done(null, false, {message: 'Wrong password'});
        }
      });
    });
  }));