Node.js 在哪里以及如何编写登录代码,并使用mongoose注册用户,以便将其保存到数据库

Node.js 在哪里以及如何编写登录代码,并使用mongoose注册用户,以便将其保存到数据库,node.js,mongodb,express,mongoose,passport-local,Node.js,Mongodb,Express,Mongoose,Passport Local,我正在做一个实践,以了解passport local的passport策略,所以我已经定义了很多代码。我需要知道我应该在这里编写哪些逻辑代码。 我使用的是Angular2ionic2node.jsexpress.js和mongoose passport.js var passport = require('passport'); var LocalStrategy = require('passport-local').Strategy; var User = require('./user')

我正在做一个实践,以了解
passport local
的passport策略,所以我已经定义了很多代码。我需要知道我应该在这里编写哪些逻辑代码。 我使用的是
Angular2
ionic2
node.js
express.js
mongoose

passport.js

var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var User = require('./user');


passport.use(new LocalStrategy(
  function(username, password, done) {
    User.findOne({ username: username }, function (err, user) {
      if (err) { return done(err); }
      if (!user) { return done(null, false); }
      if (!user.verifyPassword(password)) { return done(null, false); }
      return done(null, user);
    });
  }
));
var mongoose = require('mongoose');
var Schema = moongoose.Schema;

var UserSchema = new Schema({
    email: String,
    password: String,
});
module.exports = mongoose.model('User',UserSchema);
var passport = require('passport');
var Service = require('./app/passport');
var authController  = require('./app/controllers/authentication');//this file is empty.

var requireLogin = passport.authenticate('local',{session:false});

module.exports = function(app){

    var auth = express.Router();

    app.use('/api/auth', auth);

    auth.post('/register',function(req, res){
        authController.register(req,res);
    } );

    auth.post('/login', requireLogin, function(req, res){
        authController.login(req, res);
    });
};
上述文件包含实施passport策略的代码,即
passport local

user.js

var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var User = require('./user');


passport.use(new LocalStrategy(
  function(username, password, done) {
    User.findOne({ username: username }, function (err, user) {
      if (err) { return done(err); }
      if (!user) { return done(null, false); }
      if (!user.verifyPassword(password)) { return done(null, false); }
      return done(null, user);
    });
  }
));
var mongoose = require('mongoose');
var Schema = moongoose.Schema;

var UserSchema = new Schema({
    email: String,
    password: String,
});
module.exports = mongoose.model('User',UserSchema);
var passport = require('passport');
var Service = require('./app/passport');
var authController  = require('./app/controllers/authentication');//this file is empty.

var requireLogin = passport.authenticate('local',{session:false});

module.exports = function(app){

    var auth = express.Router();

    app.use('/api/auth', auth);

    auth.post('/register',function(req, res){
        authController.register(req,res);
    } );

    auth.post('/login', requireLogin, function(req, res){
        authController.login(req, res);
    });
};
上面是我的用户模式,其中包含我的用户模型

routes.js

var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var User = require('./user');


passport.use(new LocalStrategy(
  function(username, password, done) {
    User.findOne({ username: username }, function (err, user) {
      if (err) { return done(err); }
      if (!user) { return done(null, false); }
      if (!user.verifyPassword(password)) { return done(null, false); }
      return done(null, user);
    });
  }
));
var mongoose = require('mongoose');
var Schema = moongoose.Schema;

var UserSchema = new Schema({
    email: String,
    password: String,
});
module.exports = mongoose.model('User',UserSchema);
var passport = require('passport');
var Service = require('./app/passport');
var authController  = require('./app/controllers/authentication');//this file is empty.

var requireLogin = passport.authenticate('local',{session:false});

module.exports = function(app){

    var auth = express.Router();

    app.use('/api/auth', auth);

    auth.post('/register',function(req, res){
        authController.register(req,res);
    } );

    auth.post('/login', requireLogin, function(req, res){
        authController.login(req, res);
    });
};
上面包含了路线

  • 在护照上使用以下代码

    passport.use(new LocalStrategy({
        usernameField: 'userId'
      },
    function(username, password, done) {
        User.findOne({ email: username }, function (err, user) {
         if (err) { return done(err); }
          // Return if user not found in database
          if (!user) {
            return done(null, false, {
      message: 'User not found.. check username'
      });
          }
        // Return if password is wrong
        if (!user.validPassword(password)) {
         return done(null, false, {
        message: 'Password is wrong'
       });
      }
       // If credentials are correct, return the user object
      return done(null, user);
     });
     }
     ));
    
  • 要注册,请使用下面的逻辑/代码

    var register = function(req, res){
    var data = req.body;
    
    if(!data.emailId || !data.password){
    res.json({
        "error": true,
        "errmsg": 'missing fieid value',
        "user": {}        
    });    
    } else {
    var newUser = new User({
    Email: data.emailId,
    Password: data.password
    });
    
    // save the user
    newUser.save(function(err, user) {
    console.log(err);
    if (err){
      res.json({
            "error": true,
            "errmsg": err,
            "user": {}
        });
    } else {
      res.json({
            "error": false,
            "errmsg": null,
            "user": user
      });            
    }             
    });
    }   
    }
    
  • 登入

    var login = function(req, res){
    passport.authenticate('local', function(err, user, info){
    var token;
    
     // If Passport throws/catches an error
    if (err) {
    res.json({
            "error": true,
            "errmsg": err,
            "user": {}        
    });
     return;
    }
    
     // If a user is found
    if(user){
    //console.log('token',user);
    token = user.generateJwt();
    res.status(200);
    res.json({
          "error": false,
          "errmsg": null,
          "user": token
      });
     } else {
     // If user is not found
     res.status(200).json({
            "error": true,
            "errmsg": info.message,
            "user": {}        
     });
     }
     })(req, res);  
      }
    

  • 登录时,以用户名和passport的形式传递电子邮件将与数据库中存储的电子邮件相匹配。

    我这里不使用jwt。在这种情况下,只需注释该代码并以json传递给用户即可