簡體   English   中英

我在哪里以及如何編寫代碼來登錄並使用貓鼬注冊用戶,以便可以將其保存到數據庫中

[英]Where and how do I write code for login and register the user using mongoose so that I can save it to the database

我正在動手理解passport-local的護照策略,因此我已經定義了很多代碼。我需要知道我應該在這里編寫什么邏輯代碼。 我使用Angular2 ionic2 node.js express.jsmongoose

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);
    });
  }
));

上面的文件污染了實施護照策略的代碼,即passport-local

user.js

var mongoose = require('mongoose');
var Schema = moongoose.Schema;

var UserSchema = new Schema({
    email: String,
    password: String,
});
module.exports = mongoose.model('User',UserSchema);

上面是我的用戶架構,其中包含我的用戶模型。

routes.js

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);
    });
};

以上包含路線。

  1. 在護照上使用以下代碼

     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); }); } )); 
  2. 要注冊使用以下邏輯/代碼

     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 }); } }); } } 
  3. 登錄

     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); } 

登錄時,通過電子郵件作為用戶名和護照將其與存儲在db中的電子郵件匹配。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM