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传递给用户即可