рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ Pass.js


PassportJS рдиреЛрдб рдХреЗ рддрд╣рдд рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд▓рд┐рдП рдорд┐рдбрд▓рд╡реЗрдпрд░ рд╣реИред рдкрд╛рд╕рдкреЛрд░реНрдЯ рднрд╛рд░реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ VKontakte рдФрд░ рдЕрдиреНрдп рдЯреНрд╡рд┐рдЯрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рд╕реЗрд╡рд╛рдУрдВ рдХреА рд╕реВрдЪреА рдпрд╣рд╛рдВ рджреЗрдЦреА рдЬрд╛ рд╕рдХрддреА рд╣реИ ред рдореИрдВ рдереЛрдбрд╝реА рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдорд┐рдбрд▓рд╡реЗрдпрд░ рд▓реЙрдЧрд┐рди рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдмрд╕реЗ рд╕рд╛рдзрд╛рд░рдг рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рд╕рдмрд╕реЗ рдЕрдзреАрд░ рдХреЗ рд▓рд┐рдП - рддреИрдпрд╛рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдпрд╣рд╛рдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

рдирд┐рд░реНрднрд░рддрд╛:




рдореИрдВ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдХрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред рдЙрдирдХреЗ рдмрд┐рдирд╛ рдХрд░рдирд╛ рдХрд╛рдлреА рд╕рдВрднрд╡ рд╣реИ:



рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЙрдбрд▓


рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЙрдбрд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:
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.' }); }); })); 


LocalStrategy 2 рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдк рдФрд░ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯред
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдпрджрд┐ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк `LocalStrategy` рдореЗрдВ рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд░рдгрдиреАрддрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рдлрд╝реЙрд░реНрдореЗрдЯ рдХреЛ рдЕрдзрд┐рдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдЦреЛрдЬреЗрдЧреАред рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рддреЛ рдЖрдк рдЕрдкрдиреЗ рдкреНрд░рдкрддреНрд░ рдирд╛рдореЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рдпрд╛ рдерд╛ред
рджреВрд╕рд░рд╛ рддрд░реНрдХ - рдорд┐рдбрд▓рд╡реЗрдпрд░ - рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ `рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо`,` рдкрд╛рд╕рдкреЛрд░реНрдЯ` рдФрд░ `рдХрд┐рдпрд╛` рд▓реЗрддрд╛ рд╣реИред рдХрд┐рдпрд╛ рдореЗрдВ, рджреВрд╕рд░рд╛ рддрд░реНрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ, рдпрджрд┐ рдХреЛрдИ рд╣реЛред

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдмрд╛рдзреНрдпрдХрд╛рд░реА рдкреНрд░рд╛рдзрд┐рдХрд░рдг

рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдХреЗрд╡рд▓ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рджреМрд░рд╛рди рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рдпрджрд┐ рд╕рдм рдХреБрдЫ рдХреНрд░рдо рдореЗрдВ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореМрдЬреВрдж рд╣реИ, рддреЛ рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рддреНрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреА рдЬрд╛рддреА рд╣реИ, рдФрд░ рд╕рддреНрд░ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛, рдмрджрд▓реЗ рдореЗрдВ, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреБрдХреАрдЬрд╝ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдж рдХреЗ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдХреБрдХреАрдЬрд╝ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдкрд╛рд╕рдкреЛрд░реНрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛, рдФрд░ рд╕рддреНрд░ рд╕реЗ рдЙрд╕рдХрд╛ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рдХреЛ рд╕рддреНрд░ рд╕реЗ рд╕рд╣реЗрдЬрдиреЗ рдпрд╛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд╛рд╕рдкреЛрд░реНрдЯ 'passport.serializeUser' () рдФрд░ `passport.deserializeUser '() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

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


рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдЬрд╛рдБрдЪ


рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╕рддреНрдпрд╛рдкрди req.isAuthenticated () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдореЗрдВ рдЬрд╛рдВрдЪ рдХрд░реВрдВрдЧрд╛ред

 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/In201206/


All Articles