passportjs ທີ່ພວກບ້າ MEAN Stack ຄວນມີໄວ້ຕິດໂຕ
ໃນການພັດທະນາ web application ທີ່ຕ້ອງມີການ authentication ຫຼື
ລະບົບ login ຕ່າງໆນັ້ນເຮັດໃຫ້ການພັດທະນາຫຍຸງຍາກສົມຄວນ ເພາະຕ້ອງຄຳນຶງເຖິງຄວາມປອດໄພ,ການຢືນຢັນວ່າຜູ້ໃຊ້ຜ່ານການພິສູດຕົວຕົນມາແລ້ວ ແລະຍິ່ງຍາກໄປໃຫຍ່ຖ້າຕ້ອງມາກວດສອບທຸກ requests ເຂົ້າມາໃນ application ຂອງເຮົາ.
ນອກນີ້ບາງຄັ້ງເຮົາກໍ່ຢາກເຮັດລະບົບ login ຜ່ານ facebook,twiter,OAuth…
ເຊິ່ງທາງ provider ພວກນີ້ກໍ່ມີການກຽມຂັ້ນຕອນວິທີໃຫ້ເຮົາສາມາດເຮັດລະບົບ
authentication ໃຫ້ເຮົາເປັນຢ່າງດີ ແຕ່ວ່າ ມັນບໍ່ມີວິທີງ່າຍກວ່ານິອີກຫວາ
ຄຳຕອບຄືມີ ນັ້ນກໍ່ຄື passportjs ທີ່ເວົ້າມານີ້ເອງ.
passportjs ຄືຫຍັງກັນ
passportjs
ຄື authentication middleware
ສຳລັບ nodejs
ທີ່ເຮັດໃຫ້ເຮົາສ້າງລະບົບ authentication ໄດ້ງ່າຍໆ ແລະ ມີຄຸນນະພາບ.
concept ຂອງ passportjs
passportjs
ຈະເອີ້ນວິທີການໃນການ authentication ວ່າ Strategy(ກົນລະຍູດ) ເຊິ່ງ Strategy
ຂອງ passportjs
ກໍ່ມີຫຼາກຫຼາຍໃຫ້ເລືອກໃຊ້ແຕ່ຈະມີຫຼັກໆຢູ່ແມ່ນ passport-local
passport-openid
passport-oauth
passport-facebook
... ແລະທີເຮົາຈະທົດລອງໃຊ້ແມ່ນ passport-local
ທີ່ເຮັດໃຫ້ເຮົາສ້າງລະບົບ authentication
ຂຶ້ນພາຍໃນເຄື່ອງຂອງເຮົາເອງ.
ລອງໃຊ້ passprortjs
ໃນການສາທິດການໃຊ້ເບື້ອງຕົນຈະໃຊ້ Strategy
ແບບ local
ນັ້ນຄື
module passport-local
.
ກ່ອນອື່ນຕ້ອງຕິດຕັ້ງ passportjs
ເສຍກ່ອນ
$ npm install passport
ຕໍ່ຈາກນັ້ນກໍ່ຕິດຕັ້ງ passport-local
$ npm install passport-local
passportjs ຈະເປັນພຽງແຕ່ໂຕກາງໃນການ authentication
ເຊິ່ງມັນຈະໄປເອີ້ນໃຊ້ passport-local
ທີເປັນ Strategy
ໃນການ authentication
ຂອງຕົວຢ່າງນີ້.
ໃນການເອີ້ນໃຊ້ Strategy
ນັ້ນແມ່ນພຽງເອີ້ນໃຊ້ດ້ວຍ function
passport.authenticate('<Strategy>')
. ເຊິ່ງໃນທີ່ນິ້ເຮົາຈະເອີ້ນໃຊ້ຢູ່
ພາຍໃນ expressjs
.
Configure passportjs ກ່ອນນຳໄປໃຊ້ສະເໝີ
ການທີ່ເຮົາຈະເອົາ passportjs ໄປໃຊ້ເພື່ອກວດສອບຜູ້ໃໍຊ້ຕ້ອງມີການ configure
ແລະກຳນົດເງື່ອນໄຂໃຫ້ passportjs ຮູ້ເສຍກ່ອນວ່າຂໍ້ມູນຜູ້ໃຊ້ທີ່ສົ່ງເຂົ້າມານັ້ນຖືກຕ້ອງແລ້ວຫຼືບໍ່ ຖ້າບໍ່ແລ້ວຈະປະຕິບັດແບບໃດ ແລະ ຖ້າສຳເລັດຈະປະຕິບັດແບບໃດ ເຊິ່ງກໍລະນີເມື່ອສຳເລັດແລ້ວນັ້ນເຮົາຈະເກັບ session ຂອງຜູ້ໃຊ້ໄວ້
ດັງນັ້ນເຮົາຕ້ອງໄດ້ຕິດຕັ້ງ express-session
ເຂົ້າໄປອີກ.
ສິ່ງທີຕ້ອງເຮັດມີ:
ປະກາດໃຊ້ passport
var passport=require('passport');
var LocalStrategy=require('passport-local').Strategy;.....
app.use(session({
secret: '9843849384hfihvjfdvnkjfd984983493849fiuhiufivh8349834',
resave: false,
saveUninitialized: true
}));
app.use(passport.initialize());
app.use(passport.session());
ກຳນົດເງື່ນໄຂ
ໃນທີ່ນີ້ເຮົາຈະກຳນົດ username
ແລະ password
ໄວ້ໃນ file ແຕ່ເຮົາສາມາດໃຊ້ username
ແລະ password
ຈາກ database
ໄດ້.
ສຳລັບ username
ແລະ password
ຈະຖືກສົ່ງມາດ້ວຍ field
username
ແລະ password
....passport.use(new LocalStrategy(function (username,password,done) {
if (username!=conf.auth.username || password!=conf.auth.password){
return done(null,false,{ message: 'Incorrect username and password' });
}
return done(null,user);
}));...
ທຳການ serialize ແລະ deserialize
ເມື່ອ user login ສຳເລັດ passportjs ຈະສ້າງ req.user
ເອົາໄວ້ໃຫ້ເຮົາ check ວ່າ user login ມາແລ້ວຫຼືບໍ່.ເຊິ່ງກ່ອນອຶ່ນຕ້ອງ serialize
ແລະ deserialize
ເສຍກ່ອນສຶກສາມາດໃຊ້ງານໄດ້.
passport.serializeUser(function(user, done) {
done(null, user);
});passport.deserializeUser(function(user, done) {
done(null, user);
});
ໃສ່ໄວ້ໃນ router ທີ່ຕ້ອງການກວດສອບ
app.post('/login',
passport.authenticate('local', { successRedirect: '/',
failureRedirect: '/login'
})
);
form ສຳລັບ login
<form action="/login" method="post">
<div>
<label>Username:</label>
<input type="text" name="username"/>
</div>
<div>
<label>Password:</label>
<input type="password" name="password"/>
</div>
<div>
<input type="submit" value="Log In"/>
</div>
</form>
ເມື່ອ submit form passportjs
ກໍ່ຈະປະຕິບັດຕາມເງື່ນໄຂທີ່ໄດ້ກຳນົດໄວ້ແລະຖ້າ login ສະເລັດ passportjs
ຈະສ້າງ session ໄວ້ໃຫ້ເຮົາຢູ່ພາຍໃນ object user
ສາມາດອ້າງອີງໄດ້ດ້ວຍreq.user
check ວ່າ user ຜ່ານການ authentication
?!.
ເຮົາສາມາດສ້າງ middleware ກວດສອບ req.user
ໄດ້.
function auth() {
return function (req,res,next) {
if (req.user) {
return next()
}
res.redirect('/login');
}
}
ນຳໄປໃສ່ໄວ້ທີ່ router
ທີ່ຕ້ອງການກວດສອບໄດ້ເລິຍ
router.get('/books/item',checkauth,function (req, res, next) { api.showlotteryBooks(function (err, respond, body) {
if (err) throw err;
res.render('lottery_items.html',{datas:JSON.parse(body)});
});});
ເຮັດໃຫ້ເຮົາງ່າຍແລະສະບາຍໄປຫຼາຍເຕີມ.
ສະຫຼຸບ
passporjs ເຮັດໃຫ້ການເຮັດ authentication
ງ່າຍແລະປອດໄພຂຶ້ນ ສຳລັບບົດຄວາມນີ້ເປັນພຽງພາບລວມເຮົານັ້ນສາມາດເຂົ້າໄປສຶກສາໄດ້ທີ່ passportjs docs ເອົາເປັນວ່າມາໃຊ້ກັນເລີຍກັບ passportjs
comment ດ່າໄດ້ແຕ່ຢ່າແຮງ