var UserSchema = new mongoose.Schema({ username: { type: String, unique: true, required: true }, password: { type: String, required: true }, }); mongoose.model('user', UserSchema);
var passport = require('passport'); var LocalStrategy = require('passport-local').Strategy; passport.use(new LocalStrategy({ usernameField: 'email', passwordField: 'password' }, function(username, password,done){ User.findOne({ username : username},function(err,user){ return err ? done(err) : user ? password === user.password ? done(null, user) : done(null, false, { message: 'Incorrect password.' }) : done(null, false, { message: 'Incorrect username.' }); }); }));
passport.serializeUser(function(user, done) { done(null, user.id); }); passport.deserializeUser(function(id, done) { User.findById(id, function(err,user){ err ? done(err) : done(null,user); }); });
// Middlewares, passport: app.use(express.cookieParser()); app.use(express.bodyParser()); app.use(express.session({ secret: 'SECRET' })); // Passport: app.use(passport.initialize()); app.use(passport.session());
// Auth system app.post('/login', controllers.users.login); app.post('/register', controllers.users.register); app.get('/logout', controllers.users.logout);
// , , . // , passport.authenticate() req.logIn , . . , console.log(), , ... // req.user module.exports.login = function(req, res, next) { passport.authenticate('local', function(err, user, info) { return err ? next(err) : user ? req.logIn(user, function(err) { return err ? next(err) : res.redirect('/private'); }) : res.redirect('/'); } )(req, res, next); }; // =) module.exports.logout = function(req, res) { req.logout(); res.redirect('/'); }; // . , , , `req.logIn`, module.exports.register = function(req, res, next) { var user = new User({ username: req.body.email, password: req.body.password}); user.save(function(err) { return err ? next(err) : req.logIn(user, function(err) { return err ? next(err) : res.redirect('/private'); }); }); };
exports.mustAuthenticatedMw = function (req, res, next){ req.isAuthenticated() ? next() : res.redirect('/'); };
App.all('private', mustAuthenticatedMw); App.all('private/*', mustAuthenticatedMw);
h4 Register your account form(action='/register' method='post') fieldset label(for='email') Email input(type='email' name='email' placeholder='Your Email') label(for='password') Password input(type='password' name='password' placeholder='Your Password') button(type='Register')
h4 Login to your account form(action='/login' method='post') fieldset label(for='email') Email input(type='email' name='email' placeholder='Your Email') label(for='password') Password input(type='password' name='password' placeholder='Your Password') button(type='Login')
a(href='/logout') logout
Source: https://habr.com/ru/post/201206/