Node.js I';我是新手,不知道如何正确地验证登录名

Node.js I';我是新手,不知道如何正确地验证登录名,node.js,authentication,mongoose,passport.js,mean-stack,Node.js,Authentication,Mongoose,Passport.js,Mean Stack,我对使用meanstack很陌生,并且一直在寻找一种正确的方法来验证Mongodb的登录。我试了好几次,但似乎都没有成功。下面是我的服务器代码,用于路由和向数据库注册用户 const express = require('express'); const ejs = require('ejs'); const passport = require('passport'); const flash = require('express-flash'); const session = requir

我对使用meanstack很陌生,并且一直在寻找一种正确的方法来验证Mongodb的登录。我试了好几次,但似乎都没有成功。下面是我的服务器代码,用于路由和向数据库注册用户

const express = require('express');
const ejs = require('ejs');
const passport = require('passport');
const flash = require('express-flash');
const session = require('express-session');
const bcrypt = require('bcrypt');
const monk = require('monk');


const app = express();


//connects to database
const db = monk(process.env.MONGO_URL || 'localhost/shop');
//connect to database and making collection if does not exist
const users = db.get('users');

//set view engine to ejs
 app.set('view engine', 'ejs');
app.use(express.urlencoded({ extended: false}))
app.use(express.static(__dirname + '/views/partials'))
app.use(flash());
app.use(session({
  secret: 'secret',
  resave: false,
  saveUninitialized: false
}))
app.use(passport.initialize());
app.use(passport.session());
//only use below when passport authentication is ready
//app.use(passport.session())


function validRegister(user) {
    //checking client is sending username,email and password
    return user.name && user.name.toString() !== '' &&
    user.email && user.email.toString() !== '' &&
    user.password && user.password.toString() !== '';
}

//use res.render to look up an ejs file

//home page
app.get('/', function(req, res) {
  res.render('pages/index');
});

app.get('/success', function(req, res) {
  res.json('Successful login');
});

app.get('/fail', function(req, res) {
  res.json('login attempt failed')
});

app.post('/register', (req, res) => {
  const { name, email, password} = req.body;
  let errors = [];

  if (!name || !email || !password) {
    errors.push({ msg: 'Please enter all fields' });
  }

  if (password != password) {
    errors.push({ msg: 'Passwords do not match' });
  }

  if (password.length < 6) {
    errors.push({ msg: 'Password must be at least 6 characters' });
  }

  if (errors.length > 0) {
    res.json('fuck');
  } else {
    User.findOne({ email: email }).then(user => {
      if (user) {
        errors.push({ msg: 'Email already exists' });
          }else {
        const newUser = new User({
          name,
          email,
          password
        });

        bcrypt.genSalt(10, (err, salt) => {
          bcrypt.hash(newUser.password, salt, (err, hash) => {
            if (err) throw err;
            newUser.password = hash;
            newUser
              .save()
              .then(user => {
                req.flash(
                  'success_msg',
                  'You are now registered and can log in'
                );
                res.redirect('/');
              })
              .catch(err => console.log(err));
          });
        });
      }
    });
  }
});

app.listen(5000);
console.log('Server running on port 5000');
const express=require('express');
const ejs=require('ejs');
const passport=require(‘passport’);
常量闪存=需要(“快速闪存”);
const session=require('express-session');
const bcrypt=require('bcrypt');
const monk=需要(“monk”);
常量app=express();
//连接到数据库
const db=monk(process.env.MONGO_URL | | |“localhost/shop”);
//连接到数据库并进行收集(如果不存在)
const users=db.get('users');
//将视图引擎设置为ejs
应用程序集(“查看引擎”、“ejs”);
app.use(express.urlencoded({extended:false}))
app.use(express.static(uu dirname+'/views/partials'))
应用程序使用(flash());
应用程序使用(会话)({
秘密:“秘密”,
resave:false,
saveUninitialized:false
}))
app.use(passport.initialize());
app.use(passport.session());
//仅在passport身份验证就绪时使用以下选项
//app.use(passport.session())
功能有效注册表(用户){
//检查客户端是否发送用户名、电子邮件和密码
返回user.name&&user.name.toString()&&
user.email&&user.email.toString()&&
user.password&&user.password.toString()!='';
}
//使用res.render查找ejs文件
//主页
app.get('/',函数(req,res){
res.render(“页面/索引”);
});
app.get('/success',函数(req,res){
res.json(“成功登录”);
});
app.get('/fail',函数(req,res){
res.json('登录尝试失败')
});
应用程序发布(“/寄存器”,(请求,回复)=>{
const{name,email,password}=req.body;
让错误=[];
如果(!姓名| | |!电子邮件| |!密码){
错误。推送({msg:'请输入所有字段'});
}
如果(密码!=密码){
错误。推送({msg:'密码不匹配'});
}
如果(密码长度<6){
错误。推送({msg:'密码必须至少为6个字符');
}
如果(errors.length>0){
res.json(“操”);
}否则{
findOne({email:email})。然后(User=>{
如果(用户){
错误。推送({msg:'电子邮件已存在'});
}否则{
const newUser=新用户({
名称
电子邮件,
密码
});
bcrypt.genSalt(10,(错误,盐)=>{
bcrypt.hash(newUser.password,salt,(err,hash)=>{
如果(错误)抛出错误;
newUser.password=hash;
新用户
.save()
。然后(用户=>{
要求闪光(
“成功消息”,
'您现在已注册,可以登录'
);
res.redirect('/');
})
.catch(err=>console.log(err));
});
});
}
});
}
});
app.listen(5000);
log('Server running on port 5000');
顺便说一句,“/success”和“/fail”仅用于查看我的登录是否基于重定向工作