[英]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.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);
});
}
));
上面的文件污染了實施護照策略的代碼,即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);
});
};
以上包含路線。
在護照上使用以下代碼
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); }
登錄時,通過電子郵件作為用戶名和護照將其與存儲在db中的電子郵件匹配。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.