Mi az OAuth?
Az OAuth (Open Authorization) egy engedélyezési protokoll. Harmadik féltől származó alkalmazás hozzáférhet a webhely felhasználói adataihoz (például a Google vagy a Twitter) anélkül, hogy elárulná a jelszavukat. Az olyan webhelyek, mint a Quora, a Medium, az AirBnb és még sokan mások, az OAuth használatával kínálnak hitelesítést.
Az OAuth valóban egyszerűbbé teszi az életünket azzal, hogy feleslegessé teszi a szinte minden webhelyen létrehozott minden fiók jelszavának emlékét. Csak emlékeznie kell az OAuth szolgáltató fő fiókjának jelszavára.
Mi a Passport.js?
A Passport egy köztes szoftver, amely az Express-alapú webalkalmazásokon valósítja meg a hitelesítést. Több mint 500 stratégiát kínál. Mik ezek a stratégiák? A kérelmek hitelesítésére stratégiákat használnak. Minden stratégiának saját npm csomagja van (például passport-twitter, passport-google-oauth20). Használat előtt be kell állítani egy stratégiát.
Miért használja a Passport.js fájlt?
Itt van hat ok arra vonatkozóan, hogy miért kell használni az útlevelet:
- Könnyű
- Könnyen konfigurálható
- Támogatja a tartós munkameneteket
- Ajánlatok OAuth
- Külön modulokat biztosít minden stratégiához
- Lehetővé teszi az egyéni stratégiák végrehajtását
Építsünk valamit
A kezdéshez telepítenünk kell az NPM útlevelét:
npm install passport
Egy egyszerű alkalmazást fogunk készíteni, amely csak akkor engedélyezi a felhasználó számára a titkos útvonal elérését, ha bejelentkezik. Ebben az oktatóanyagban a passport-google-oauth20 stratégiát fogom használni. Használjon bátran bármilyen más stratégiát, amelyet előnyben részesít, de mindenképpen ellenőrizze a dokumentumokat, hogy konfigurálják.
A folytatás előtt szükségünk van egy clientID-re és clientSecret-re. Ha egyet szeretne kapni, lépjen a //console.developers.google.com webhelyre, és hozzon létre egy új projektet. Ezután lépjen az API-k és szolgáltatások engedélyezése és engedélyezze a Google+ API-t. Válassza ki az API-t, és kattintson a hitelesítő adatok létrehozására.
Töltse ki az űrlapot, és ugyanazt a visszahívási URL-t használja mind az űrlapon, mind a fájlján. Feltétlenül olvassa el a kódhoz fűzött megjegyzéseket, hogy kiderüljön, hogy minden összeillik.
app.js
// Required dependencies const express = require('express'); const app = express(); const passport = require('passport'); const GoogleStrategy = require('passport-google-oauth20'); const cookieSession = require('cookie-session'); // cookieSession config app.use(cookieSession({ maxAge: 24 * 60 * 60 * 1000, // One day in milliseconds keys: ['randomstringhere'] })); app.use(passport.initialize()); // Used to initialize passport app.use(passport.session()); // Used to persist login sessions // Strategy config passport.use(new GoogleStrategy({ clientID: 'YOUR_CLIENTID_HERE', clientSecret: 'YOUR_CLIENT_SECRET_HERE', callbackURL: '//localhost:8000/auth/google/callback' }, (accessToken, refreshToken, profile, done) => { done(null, profile); // passes the profile data to serializeUser } )); // Used to stuff a piece of information into a cookie passport.serializeUser((user, done) => { done(null, user); }); // Used to decode the received cookie and persist session passport.deserializeUser((user, done) => { done(null, user); }); // Middleware to check if the user is authenticated function isUserAuthenticated(req, res, next) { if (req.user) { next(); } else { res.send('You must login!'); } } // Routes app.get('/', (req, res) => { res.render('index.ejs'); }); // passport.authenticate middleware is used here to authenticate the request app.get('/auth/google', passport.authenticate('google', { scope: ['profile'] // Used to specify the required data })); // The middleware receives the data from Google and runs the function on Strategy config app.get('/auth/google/callback', passport.authenticate('google'), (req, res) => { res.redirect('/secret'); }); // Secret route app.get('/secret', isUserAuthenticated, (req, res) => { res.send('You have reached the secret route'); }); // Logout route app.get('/logout', (req, res) => { req.logout(); res.redirect('/'); }); app.listen(8000, () => { console.log('Server Started!'); });
index.ejs
- Login
- Secret
- Logout
Amint láthatja, létrehoztunk egy /secret
útvonalat, és csak akkor adunk hozzáférést hozzá, ha a felhasználó hitelesítve van. A felhasználó hitelesítésének ellenőrzéséhez létrehoztunk egy köztes szoftvert, amely ellenőrzi, hogy a kérelem tartalmaz-e felhasználói objektumot. Végül a kijelentkezéshez req.logout()
az útlevél által biztosított módszert használtuk a munkamenet törléséhez.
Íme néhány forrás az útlevélről
A Passport.js hivatalos dokumentációja
Egyszerű, nem feltűnő hitelesítés a Node.js www.passportjs.org webhelyhez
Következtetés
Itt csak egy stratégiát láttunk. 500+ van még. Nagyon ajánlom, hogy nézze át a Passport hivatalos dokumentációját, és derítse ki, mit kínálnak még. Köszönjük, hogy időt szánt ennek elolvasására. Lépjen kapcsolatba velem nyugodtan a LinkedIn, a Twitter és a GitHub szolgáltatásain. Sok sikert kívánok neked!

Előző cikk
Gyors bemutatás az anyagtervezésről a Materialize segítségével
Mi az anyagtervezés? medium.freecodecamp.org