npm install -g sails sails new passport-sails cd passport-sails sails lift
npm install -g nodemon
Then just run nodemon instead of sails lift. npm install passport npm install passport-local npm install passport-remember-me
// var passport = require('passport'), LocalStrategy = require('passport-local').Strategy; 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, { message: 'Incorrect username.' }); } if (!user.validPassword(password)) { return done(null, false, { message: 'Incorrect password.' }); } return done(null, user); }); } )); app.configure(function() { app.use(express.static('public')); app.use(express.cookieParser()); app.use(express.bodyParser()); app.use(express.session({ secret: 'keyboard cat' })); app.use(passport.initialize()); app.use(passport.session()); app.use(app.router); });
module.exports = { express: { customMiddleware: function(app) {} } };
//config/middleware.js var bcrypt = require('bcrypt'), // bcrypt crypto = require('crypto'), //crypto token' passport = require('passport'), //passport LocalStrategy = require('passport-local').Strategy, // RememberMeStrategy = require('passport-remember-me').Strategy; //Remember Me // "login sessions" // serialize\deserialize. passport.serializeUser(function(user, next) { next(null, user.id); }); passport.deserializeUser(function(id, next) { User .findOne(id) .done(function(error, user) { next(error, user); }); }); module.exports = { express: { customMiddleware: function(app) { // passport.use(new LocalStrategy({ usernameField: 'username', passwordField: 'password' }, function(username, password, next) { // email' User .findOne() .where({ or: [{ username: username }, { email: username }] }) .done(function(error, user) { // next-callback': //next(error, user, info); if (error) { next(error); } else if (!user) { next(false, false, 'This user not exists'); } else if (!bcrypt.compareSync(password, user.password)) { next(false, false, 'Wrong password'); } else { next(false, user); } }); } )); // RememberMe passport.use(new RememberMeStrategy({ key: 'token' // cookie, token }, function(token, done) { // token' User .findOne() .where({ autoLoginHash: token }) .done(function(error, user) { if (error) { done(error); } else if (!user) { done(null, false); } else { // token delete user.autoLoginHash; user.save(function() {}); done(null, user); } }); }, function(user, done) { // token var token = crypto.randomBytes(32).toString('hex'); user.autoLoginHash = token; user.save(function() {}); done(null, token); })); app.use(passport.initialize()); app.use(passport.session()); app.use(passport.authenticate('remember-me')); } } };
//api/controllers/AuthController.js module.exports = { login: function(req, res, next) { // authenticate LocalStrategy passport.authenticate('local', function(error, user, info) { if (error) { next(new Error('Some error was occured')); } else if (!user) { next(info); } else { // // login // req.login(user, function(error) { if (error) { next(new Error(error)); } else { res.redirect('/my-profile/' + req.user.username); } }); } })(req, res); //IMPORTANT: , authenticate('login', ...)(req,res); //Passport' \ req.body }, logout: function(req, res, next) { // token' res.clearCookie('token'); req.logout(); res.redirect('/'); } };
//config/bootstrap.js module.exports.bootstrap = function(cb) { var passport = require('passport'), // passport http = require('http'), // http initialize = passport.initialize(), session = passport.session(), // :) methods = ['login', 'logIn', 'logout', 'logOut', 'isAuthenticated', 'isUnauthenticated']; sails.removeAllListeners('router:request'); // listeners request' sails.on('router:request', function(req, res) { // event-listener initialize(req, res, function() { session(req, res, function(error) { if (error) { return sails.config[500](500, req, res); } for (var i = 0; i < methods.length; i++) { //Bind' req- req[methods[i]] = http.IncomingMessage.prototype[methods[i]].bind(req); } // sails route sails.router.route(req, res); }); }); }); //IMPORTANT: cb() // Sails cb(); };
Source: https://habr.com/ru/post/211925/
All Articles