SailsJS рдкрд░ рдПрдХ рд╕рд░рд▓ рдмреНрд▓реЙрдЧ рд▓реЗрдЦрди: рд╢реБрд░реБрдЖрддреА рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреЗ рд╡реНрдпрд╡рд╣рд╛рд░ (рднрд╛рдЧ 2)

рд╕рд╛рд░







рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдордиреЗ рд╕реАрдЦрд╛ рдХрд┐ рдХреИрд╕реЗ рдЕрдкрдиреЗ рдмреНрд▓реЙрдЧ рдХреЗ рд▓рд┐рдП рдореВрд▓ рдмрд╛рддреЗрдВ рд▓рд┐рдЦрдирд╛ рд╣реИ, рдореВрд▓ рдмрд╛рддреЗрдВ рд▓рд┐рдЦрддреЗ рд╕рдордп, рд╣рдо рд╕реНрдЯреЗрдЯрд┐рдХреНрд╕ рдХреЗ рд╕рдВрдЧрдарди рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реБрдП, рдПрдХ рдореЙрдбрд▓ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдФрд░ рдирд┐рдпрдВрддреНрд░рдХ рдХреЛрдб рд▓рд┐рдЦрд╛ред рд╣рдордиреЗ рд╕реАрдЦрд╛ рдХрд┐ рдХреИрд╕реЗ рдкрде рд╡рд┐рдиреНрдпрд╛рд╕ ( рдорд╛рд░реНрдЧреЛрдВ.рдЬреЗрдПрд╕ ) рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╣реИ, рдФрд░ SailsJS рдореЗрдВ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рд╣реИред SailsJS рдкрд░ рдПрдХ рд╕рд░рд▓ рдмреНрд▓реЙрдЧ рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмрд┐рдВрджреБрдУрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВрдЧреЗ: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛: рдирд┐рд░реНрдорд╛рдгред рд╕рддреНрд░: рдирд┐рд░реНрдорд╛рдг (рдкреНрд░рд╡реЗрд╢), рд╡рд┐рд░рд╛рдо (рдирд┐рдХрд╛рд╕)ред рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рд▓реЗрдЦрди, рдФрд░ рдиреАрддрд┐рдпреЛрдВ рдФрд░ рдкрд╣реБрдВрдЪ рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ред





рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ



рдПрдХ рдирдпрд╛ рдПрдкреАрдЖрдИ рдХреЙрдореНрдкреНрд▓реЗрдХреНрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЙрд╕ рдЯреАрдо рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдореВрд▓ рдореЗрдВ рдЬрд╛рдирддреЗ рд╣реИрдВред

sails generate api user
      
      





рдЗрд╕ рдмрд╛рд░, рдХреЛрдб рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рддреЗ рд╕рдордп, рд╣рдореЗрдВ рдкрд╛рд╕рд╡рд░реНрдб рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдкрд╛рд╕рд╡рд░реНрдб-рд╣реИрд╢ рдореЙрдбреНрдпреВрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИред рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЬрдбрд╝ рдореЗрдВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВ

 npm install password-hash --save
      
      





Thesave рдкреИрд░рд╛рдореАрдЯрд░ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдкреИрдХреЗрдЬ рдореЗрдВ рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдмрдЪрд╛рдПрдВрдЧреЗ ред json ред



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



рдЖрджрд░реНрд╢


рд╣рдорд╛рд░реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдХрдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реЛрдВрдЧреА:

  1. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо
  2. рдкрд╛рд╕рд╡рд░реНрдб
  3. рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ - рдкрд╣реБрдВрдЪ рдкреИрд░рд╛рдореАрдЯрд░


рдореЙрдбрд▓ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╕рдордп, рд╣рдореЗрдВ рдпрд╣ рдирд╣реАрдВ рднреВрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╣рдо рд╕рд░реНрд╡рд░ рдкрд░ рдкрд╛рд╕рд╡рд░реНрдб рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рднреА рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рдореЙрдбрд▓ рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдп рднреА рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

 var passwordHash = require('password-hash'); var User = { attributes: { username: {type: 'string', required: true, unique: true}, password: {type: 'string', required: true, minLength: 8}, admin: { type: 'boolean', defaultsTo: false }, toJSON: function() { var element = this.toObject(); delete element.password; return element; } }, beforeCreate: function (values, next) { //       var mainPass = passwordHash.generate(values.password); values.encryptPassword = mainPass; next(); } }; module.exports = User;
      
      





рдПрдХ рдирдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ - рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдбрдкрд╛рд╕рд╡рд░реНрдб , рдЬреЛ рдкрд╛рд╕рд╡рд░реНрдб рдХрд╛ рдПрдХ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рд╕рдВрд╕реНрдХрд░рдг рд╣реИред



рдирд┐рдпрдВрддреНрд░рдХ


рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ, рд╣рдо рдХреЗрд╡рд▓ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛, рдФрд░ рдПрдХ рдЗрдВрдбреЗрдХреНрд╕ рдкреЗрдЬ рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рдХрд░реЗрдВрдЧреЗред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрджреНрдпрддрди рдФрд░ рд╡рд┐рд▓реЛрдкрди рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдХреЛ рдХреИрд╕реЗ рдХрд░реЗрдВ рдЖрдк рдЦреБрдж рдХреЛ рдкреЛрд╕реНрдЯ рдХрдВрдЯреНрд░реЛрд▓рд░ рдореЗрдВ рд╣рдордиреЗ рдЬреЛ рдХреБрдЫ рдХрд┐рдпрд╛ рд╣реИ рдЙрд╕рдХреА рд╕рдорд╛рдирддрд╛ рдореЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЛрдб рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

 module.exports = { //@API -   /** *   , *     *  , ,   *  .   *    *  .    *     * admin (api/policies/admin.js)   *       *    */ create: function (req, res) { var elem = { username : req.param('username'), password : req.param('password'), admin : req.param('admin') }; User.create(elem).exec(function (err, user) { if (err) return res.send(500); req.session.auth = true; res.redirect('/'); }); }, // @MAIN index: function (req, res) { res.view(); } };
      
      





рдкрде рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди ( config / path.js ) рдореЗрдВ рдирд┐рдореНрди рдЬреЛрдбрд╝реЗрдВред

  '/register' : 'UserController',
      
      





рдПрдХ рд╕рд░рд▓ рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ CSRF рд╕реБрд░рдХреНрд╖рд╛ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ ( config / csrf.js ), рд▓рд╛рдЗрди рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ

 module.exports.csrf = true;
      
      







рджреЗрдЦреЗрдВ ( рд╡рд┐рдЪрд╛рд░ / рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ / index.ejs )


рдФрд░ рдЕрдм рдПрдХ рдкреНрд░рд╕реНрддреБрддрд┐ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЗрд╕рдореЗрдВ рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╕рдВрд░рдЪрдирд╛ рд╣реЛрдЧреАред

 <div class="container"> <div class="row"> <div class="col-md-4"></div> <div class="col-md-4"> <div class="panel panel-default"> <div class="panel-body"> <form action="/user/create" method="post"> <input type="text" name="username" placeholder=" "><br> <input type="password" name="password" placeholder=""><br> <input type="hidden" name="_csrf" value="<%= _csrf %>"> <!--        --> <input type="hidden" name="admin" value="true"> <input type="submit" class="btn btn-success btn-block" value=""> </form> </div> </div> </div> <div class="col-md-4"></div> </div> </div>
      
      





рдпрд╛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рдмрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдПрд╕рдЖрд░рдПрдл рдХреЛ рдЕрдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреЛрд╕реНрдЯрдореИрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗред рдФрд░ рдлрд┐рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдмреНрд▓реЙрдХ рдХрд░реЗрдВред



рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдШрдЯрдХреЛрдВ рдХреЗ рд▓реЗрдЦрди рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдореЙрдбрд▓, рдирд┐рдпрдВрддреНрд░рдХ, рдкрдВрдЬреАрдХрд░рдг рдкреГрд╖реНрда рдкрде, рдФрд░ рдкреНрд░рд╕реНрддреБрддрд┐ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╣реИред



рдЕрдзрд┐рд╡реЗрд╢рди



рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЕрдзрд┐рдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкрд╛рд▓ рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рд╕рддреНрд░ рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ - рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рдХрд╛рдлреА рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ (рдпрджрд┐ рдХреБрдХреА рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХреА рдЬрд╛рдП), рддреЛ рд╣рдорд╛рд░рд╛ рд╕рддреНрд░ рдирд┐рдпрдВрддреНрд░рдХ рд╕рддреНрд░ рдмрдирд╛рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдирд╖реНрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ред рдорд╛рдирдХ рддрд░реАрдХреЗ рд╕реЗ рдПрдХ рдирдпрд╛ рдирд┐рдпрдВрддреНрд░рдХ рдмрдирд╛рдПрдВред рдпрд╣рд╛рдБ рд╣рдорд╛рд░реЗ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд╣реИред

 var passwordHash = require('password-hash'); module.exports = { // @API    create: function (req, res) { /** *    * ,     *   */ var username = req.param('username'), password = req.param('password'); /** *        *  ,    * (.     *  ,   flash) */ if (!username || !password) { return res.redirect('/session'); }; /** *      * (username - req.param('username')) *     *      *    ,   * ,     - *   ,     *     .  *       *      *    ( ) */ User.findOneByUsername(username).exec(function (err, user) { if (!user || err) return res.send(500); if (passwordHash.verify(password, user.encryptPassword)) { //     //      //    req.session.auth = true; req.session.User = user; if (req.session.User.admin) { return res.redirect('/admin'); }; }; }); }, /** *      *     *  ,    */ destroy: function (req, res) { User.findOne(req.session.User.id).exec(function (err, user) { if (user) { req.session.destroy(); res.redirect('/'); } else { res.redirect('/login'); }; }); }, // @MAIN index: function (req, res) { res.view(); } };
      
      







рдкрде рд╡рд┐рдиреНрдпрд╛рд╕


  '/login' : 'SessionController', '/logout' : { controller: 'session', action: 'destroy' },
      
      







рд╡рд┐рдЪрд╛рд░


рдФрд░ рд▓реЙрдЧрд┐рди рдкреЗрдЬ рджреГрд╢реНрдп

 <div class="container"> <div class="row"> <div class="col-md-4"></div> <div class="col-md-4 text-center"> <h2>Sign-in form</h2><hr> <form action="/session/create" method="POST"> <input type="text" name="username" placeholder="Username" class="form-control" /><br> <input type="password" name="password" placeholder="password" class="form-control" /><br> <input type="submit" class="btn btn-default" value="Log-In" /> <input type="hidden" name="_csrf" value="<%= _csrf %>" /> </form> </div> <div class="col-md-4"></div> </div> </div>
      
      





рдЕрдм рд╣рдордиреЗ рд╕рддреНрд░реЛрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдФрд░ рдмрдирд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдмрдирд╛рдИ рд╣реИ (рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░реЗрдВ), рдЕрдм рдпрд╣ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рдкреЗрдЬ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИ, рдФрд░ рдПрдХреНрд╕реЗрд╕ рдХрдВрдЯреНрд░реЛрд▓ рдкреЙрд▓рд┐рд╕реА рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИред рдФрд░ рдЗрд╕рд▓рд┐рдП рдЕрдВрддрд┐рдо рдЪрд░рдгред



рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рдФрд░ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХрд╛ рднреЗрджрднрд╛рд╡





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

 module.exports = { index: function (req, res) { Post.find() .sort('id DESC') .exec(function (err, posts) { if (err) return res.send(500); res.view({ posts: posts }); }); }, edit: function (req, res) { var Id = req.param('id'); Post.findOne(Id).exec(function (err, post) { if (!post) return res.send(404); if (err) return res.send(500); res.view({ post: post }); }); } };
      
      





рдФрд░ рд╣рдорд╛рд░реЗ рдЬрдорд╛ рдХрд░рдиреЗ рдХреЗ 2ред



рд╡рд┐рдЪрд╛рд░ / рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ / index.ejs


 <div class="container text-center"> <h2>CREATE NEW</h2><br> <div class="row"> <form action="/post/create" method="POST"> <div class="col-md-6"> <input class="form-control" type="text" name="title" placeholder="Title Post"><hr> <textarea rows="3" class="form-control" name="description" placeholder="Description"></textarea> </div> <div class="col-md-6"> <textarea rows="7" class="form-control" name="content" placeholder="Content"></textarea> </div> <div class="col-md-12"> <input type="hidden" name="_csrf" value="<%= _csrf %>" /> <br><input type="submit" class="btn btn-success" value="CREATE" /> </div> </form> </div><br> <h2>POST LIST</h2> <table class="table text-left"> <tr> <th>ID</th> <th>TITLE</th> <th></th> <th></th> <th></th> </tr> <% _.each(posts, function (post) { %> <tr> <td><%= post.id %></td> <td><%= post.title %></td> <td><a href="/post/watch/<%= post.id %>" class="btn btn-info">Look</a></td> <td><a href="/post/delete/<%= post.id %>" class="btn btn-danger">Delete</a></td> <td><a href="/admin/edit/<%= post.id %>" class="btn btn-warning">Edit</a></td> </tr> <% }) %> </table> </div>
      
      







рд╡рд┐рдЪрд╛рд░ / рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ / edit.ejs


 <div class="container"> <div class="row"> <div class="col-md-2"></div> <div class="col-md-8 well text-center"> <form action="/post/update" method="POST"> <h4>Title</h4> <input type="text" class="form-control" name="title" value="<%= post.title %>"><br> <h4>Description</h4> <textarea rows="3" name="description" class="form-control" value="<%= post.description %>"></textarea> <h4>Content</h4> <textarea rows="7" name="content" class="form-control" value="<%= post.content %>"></textarea> <input type="hidden" name="_csrf" value="<%= _csrf %>" /><br> <input type="submit" class="btn btn-success" value="Update"> </form> </div> <div class="col-md-2"></div> </div> </div>
      
      







рдЪрд▓рд┐рдП рдЕрдм рдкреЙрд▓рд┐рд╕реА рдореЗрдХрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЖрддреЗ рд╣реИрдВред



рдиреАрддрд┐


Sails рдореЗрдВ рдкрд╣реБрдБрдЪ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдгрд╛рд▓реА рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИ, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛:



рдХреЛрдб рдореЗрдВ рдЗрд╕реЗ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреА рдиреАрддрд┐ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВрдЧреЗ - рдПрдкреАрдЖрдИ / рдиреАрддрд┐рдпрд╛рдВ / admin.js ред рдФрд░ рдпрд╣рд╛рдБ рд╣рдорд╛рд░реЗ рд╕реАрдорд╛рдВрдХрдХ рдХрд╛ рдХреЛрдб рд╣реИред

 module.exports = function (req, res, ok) { if (req.session.auth && req.session.User.admin) { return ok(); } else { return res.redirect('/login'); }; }
      
      





рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдХреЙрд▓рдмреИрдХ рдЖрдЧреЗ рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдкрд░рд┐рдгрд╛рдо рд╡рд┐рдкрд░реАрдд рд╣реИ - рдирд┐рд╖реНрдХреНрд░рд┐рдп рдФрд░ рд▓реЙрдЧрд┐рди рдкреГрд╖реНрда рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рддред рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд┐рдпрдВрддреНрд░рдХ рдкрд░ рд╣рдорд╛рд░реА рдиреАрддрд┐ рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП - config / рдиреАрддрд┐рдпреЛрдВ . js рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ рдФрд░ рдЗрд╕реЗ рдирд┐рдореНрди рд░реВрдк рдореЗрдВ рд▓рд╛рдПрдВред

 module.exports.policies = { // Default policy for all controllers and actions // (`true` allows public access) '*': true, /** *     * Admin  admin.js,  *  . */ AdminController: { '*': 'admin' }, UserController: { create: 'admin' }, PostController: { //      index : true, page : true, watch : true, //      create : 'admin', update : 'admin', delete : 'admin', } };
      
      





рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рд╣рдо рдкрд╛рд▓ рдкрд░ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдмреНрд▓реЙрдЧ рд▓рд┐рдЦрдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рдХрдо рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдФрд░ рд╕реБрд░рдХреНрд╖рд╛ рд╣реИ - рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд┐рдВрдЧ (рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдлреНрд▓реИрд╢ рд╕рдВрджреЗрд╢ рднреА рдирд╣реАрдВ рд╣реИ), рдХреЛрдИ рдкреВрд░реНрдг-рдмрд╣реБ-рдмрд╣реБ-рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдЗрд╕ рдврд╛рдВрдЪреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдкрд░рд┐рдЪрдпрд╛рддреНрдордХ рдкрд╛рдареНрдпрдХреНрд░рдо рдХреЗ рд░реВрдк рдореЗрдВ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЖрдк рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рд╕реНрд╡рдпрдВ рдЕрдзреНрдпрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред ред рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдмрдбрд╝реА рдмрд╛рдд рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред



All Articles