passportjs ທີ່ພວກບ້າ MEAN Stack ຄວນມີໄວ້ຕິດໂຕ

xangnam phiasakha
VtCamp
Published in
2 min readMay 19, 2018

ໃນການພັດທະນາ 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 ດ່າໄດ້ແຕ່ຢ່າແຮງ

--

--