Ak ste niekedy použili svoj účet Google na prihlásenie do aplikácie, možno ste si všimli, aké je to jednoduché. Stačí kliknúť na jedno tlačidlo a nemusíte zadávať svoj e-mail ani heslo. Aj keď sa to zdá jednoduché, to, čo sa deje pod kapotou, je pomerne zložité. Nástroje ako Passport to však uľahčujú.
V tomto návode sa naučíte, ako implementovať Google autentifikáciu v Node pomocou Passport a Express.
Čo je cestovný pas?
pas (alebo Passport.js) je middleware na overovanie uzlov, ktorý poskytuje viac ako 500 stratégií na overovanie používateľov vrátane sociálnej autentizácie pomocou platforiem ako Google a Twitter.
Budete používať passport-google-oauth2 stratégiu overovania používateľov na stránkach Google.
Vytvorenie Google Authentication System v Node
Toto je prehľad autentifikačného systému, ktorý vytvoríte:
- Keď používateľ klikne na tlačidlo prihlásenia, bude presmerovaný na prihlasovaciu stránku Google, kde sa prihlási.
- Google presmeruje používateľa do vašej aplikácie pomocou prístupového tokenu. Prístupový token vám dáva povolenie na prístup k informáciám o profile daného používateľa.
- Ak chcete získať údaje profilu, odošlite prístupový token spoločnosti Google.
- Vytvorte nového používateľa alebo získajte existujúceho používateľa z databázy.
- Použite JWT na ochranu citlivých ciest.
Ako nastaviť Google Authentication v NodeJS pomocou Passport
Ak chcete autorizovať používateľov pomocou protokolu Google OAuth, postupujte podľa krokov nižšie,
Krok 1: Vytvorte Google Client ID a Client Secret
Pred použitím Google na prihlasovanie používateľov do vašej aplikácie musíte svoju aplikáciu zaregistrovať v službe Google, aby ste získali ID klienta a tajný kľúč klienta, ktorý sa použije pri konfigurácii služby Passport.
Prihláste sa do Konzola Google Cloud a podľa nasledujúcich krokov zaregistrujte svoju aplikáciu.
Vytvorte nový projekt. Na paneli s ponukami vyberte poverenia a v rozbaľovacom zozname vyberte ID klienta OAuth.
Ako typ aplikácie vyberte Webová aplikácia. Do poľa Názov pridajte preferovaný názov vašej aplikácie.
Pod autorizovanými URI presmerovania použite http://localhost: 3000 a http://localhost: 3000/auth/google/callback pre autorizované presmerovania URI.
Kliknite vytvoriť na vytvorenie klienta OAuth. Keďže prihlasovacie údaje aplikácie sú citlivé, budete musieť vytvoriť a .env súbor a pridajte k nemu ID klienta a tajný kľúč klienta.
CLIENT_ID =CLIENT_SECRET =
Krok 2: Nastavte server uzlov
Vytvorte priečinok, user-google-auth, a navigovať k nemu.
mkdir user-google-auth
cd user-google-auth
Inicializovať npm vytvárať package.json.
npm init -y
Keďže budete používať expresné na vytvoriť server, nainštalujte ho spustením nasledujúceho príkazu.
npm install express
Otvorte priečinok pomocou preferovaného textového editora a vytvorte nový súbor app.js. Bude slúžiť ako vstupný bod vašej aplikácie.
Vytvorte server NodeJS v app.js.
const express = vyžadovať("expres");
const app = express();
const PORT = 3000;
app.listen (PORT, () => {
console.log(`Počúvanie na porte ${PORT}`);
});
Krok 2: Nastavte MongoDB
Používateľské údaje prijaté od spoločnosti Google uložíte v a databáza MongoDB. Pred uložením informácií o používateľovi musíte definovať štruktúru, v ktorej budú údaje uložené. Mongoose je na to ako stvorená. Poskytuje pomerne jednoduchý spôsob vytvárania dátových modelov.
Inštalácia mangusta.
npm nainštalovať mongoose
Vytvorte nový súbor userModel.jsa vytvorte užívateľskú schému.
const mongoose = vyžadovať("mongoose");
const { Schema } = mongoose.model;
const UserSchema = new Schema({
google: {
id: {
typ: reťazec,
},
názov: {
typ: reťazec,
},
email: {
typ: reťazec,
},
},
});
const User = mongoose.model("Používateľ", UserSchema);
module.exports = Používateľ;
In userModel.js, importovali ste mongoose a vytvorili ste novú schému.
Všimnite si, že zoskupujete informácie od spoločnosti Google. Je to užitočné najmä vtedy, keď používate aj iné metódy autentifikácie a používateľ používa viac ako jednu. Uľahčuje to predchádzanie dvojitej registrácii.
Ďalej vytvorte db.js.
const mongoose = vyžadovať("mongoose");
mangusta. Sľub = globálny. Sľub;
const dbUrl = "mongodb://localhost/user";
const connect = async () => {
mongoose.connect (dbUrl, { useNewUrlParser: true, useUnifiedTopology: true });
const db = mongoose.connection;
db.on("chyba", () => {
console.log("nepodarilo sa pripojiť");
});
db.once("open", () => {
console.log("> Úspešne pripojené k databáze");
});
};
module.exports = { connect };
Pripojte sa k databáze v app.js.
const express = vyžadovať("expres");
const app = express();
const PORT = 3000;
const db = vyžadovať("./db");
db.connect();
app.listen (PORT, () => {
console.log(`Počúvanie na porte ${PORT}`);
});
Krok 3: Nastavte Passport
Inštalácia pas a passport-google-oauth2.
npm a pas passport-google-oauth2
Vytvorte nový súbor, passportConfig.jsa importujte stratégiu Google z passport-google-oauth2 a userModel.js.
const GoogleStrategy = require("passport-google-oauth2").Stratégia;
const User = require("./userModel");
Na konfiguráciu použite poverenia aplikácie pas s Google OAuth.
module.exports = (pas) => {
passport.use (nová stratégia Google({
clientID: process.env. CLIENT_ID,
clientSecret: process.env. CLIENT_SECRET,
callbackURL: " http://localhost: 3000/auth/google/callback",
passReqToCallback: true
},
async (request, accessToken, refreshToken, profile, done) => {
skúste {
nech existujúcePoužívateľ = wait User.findOne({ 'google.id': profile.id });
// ak používateľ existuje, vráťte používateľa
if (existingUser) {
return done (null, existujúcePoužívateľ);
}
// ak užívateľ neexistuje, vytvorte nového užívateľa
console.log('Vytvára sa nový používateľ...');
const newUser = nový používateľ({
metóda: 'google',
google: {
id: profile.id,
meno: profile.displayName,
email: profile.emails[0].value
}
});
čakať na nového používateľa.save();
return done (null, newUser);
} catch (chyba) {
návrat vykonaný (chyba, nepravda)
}
}
));
}
Po prijatí informácií o profile od spoločnosti Google skontrolujte, či daný používateľ existuje v databáze. Ak áno, jednoducho vráťte nájdeného používateľa. Ak je používateľ nový, vytvorte nový dokument v databáze a vráťte vytvoreného používateľa.
Všimnite si, že pracujete s env premenné, takže použite npm balík dotenv aby ste k nim mali prístup vo svojej aplikácii.
Inštalácia dotenv.
npm nainštalovať dotenv
Použite dotenv v app.js.
require("dotenv").config()
In app.js,prejsť pas do passportConfig.js
const pas = vyžadovať("pas");
vyžadovať("./passportConfig")(pas);
Krok 4: Vytvorte overovacie trasy
Na to potrebujete tri cesty:
- Presmerujte používateľa na prihlasovaciu stránku Google, aby ste získali prístupový token.
- Získajte používateľské údaje pomocou prijatého prístupového tokenu.
- Potom presmerujte používateľa na stránku profilu úspešné overenie.
// Presmerujte používateľa na prihlasovaciu stránku Google
app.get(
"/auth/google",
passport.authenticate("google", { rozsah: ["e-mail", "profil"] })
);
// Získanie používateľských údajov pomocou prijatého prístupového tokenu
app.get(
"/auth/google/callback",
passport.authenticate("google", { session: false }),
(req, res) => {
res.redirect("/profil/");
}
);
// trasa profilu po úspešnom prihlásení
app.get("/profil", (req, res) => {
console.log (req);
res.send("Vitajte");
});
Krok 5: Chráňte súkromné trasy
Teraz, keď ste sa prihlásili ako používateľ, ako môžete obmedziť niektoré časti vašej aplikácie iba na overených používateľov? Jedným zo spôsobov, ako to dosiahnuť, je použitie webových tokenov JSON (JWT). JWT ponúkajú bezpečný spôsob prenosu informácií. Komu autorizovať používateľov pomocou JWT bude vaša aplikácia:
- Vygenerujte token pomocou údajov používateľa.
- Odovzdajte token používateľovi (používateľ pošle token späť s požiadavkami, ktoré vyžadujú autorizáciu).
- Overte odoslaný token.
- Udeľte prístup používateľovi, ak je predložený token platný.
Inštalácia jsonwebtoken pracovať s JWT.
npm nainštalujte jsonwebtoken
In app.js, dovoz jsonwebtoken.
const jwt = required("jsonwebtoken")
Upravte adresu URL spätného volania Google, aby ste podpísali používateľa a vygenerovali token.
app.get(
"/auth/google/callback",
passport.authenticate("google", { session: false }),
(req, res) => {
jwt.sign(
{ user: req.user },
"tajný kľúč",
{ expiresIn: "1h" },
(chyba, token) => {
if (chyba) {
return res.json({
token: null,
});
}
res.json({
token,
});
}
);
}
);
Ak sa prihlásite, dostanete token.
Ďalej použite pas-jwt, stratégia JWT poskytovaná spoločnosťou Passport na overenie tokenu a autorizáciu používateľov.
npm install passport-jwt
In passportConfig.js, pridajte stratégiu JWT.
const JwtStrategy = require("passport-jwt").Stratégia;
const { ExtractJwt } = require("passport-jwt");
module.exports = (pas) => {
passport.use (nová stratégia Google(
// Stratégia Google
);
passport.use(
nová JwtStrategy(
{
jwtFromRequest: ExtractJwt.fromHeader("autorizácia"),
secretOrKey: "secretKey",
},
async (jwtPayload, hotovo) => {
skúste {
// Extrahujte používateľa
const user = jwtPayload.user;
hotovo (null, užívateľ);
} catch (chyba) {
hotovo (chyba, nepravda);
}
}
)
);
}
Tu extrahujete token z hlavičky autorizácie, kde je uložený – čo je oveľa bezpečnejšie ako jeho ukladanie do tela požiadavky.
Po overení tokenu sa objekt používateľa odošle späť do tela požiadavky. Ak chcete autorizovať používateľov, pridajte do chránených trás pasový autentizačný middleware JWT.
app.get(
"/profil",
passport.authenticate("jwt", { session: false }),
(req, res, next) => {
res.send("Vitajte");
}
);
Teraz budú mať prístup iba žiadosti, ktoré poskytujú platný token.
Ďalšie kroky
Tento tutoriál vám ukázal, ako môžete použiť službu Passport na prihlásenie používateľov do aplikácie pomocou ich účtu Google. Používanie Passportu je oveľa jednoduchšie ako iné formuláre a jeho používaním ušetríte veľa času.
Passport tiež poskytuje ďalšie autentifikačné stratégie na použitie s inými poskytovateľmi identity, ako sú Twitter a Facebook. Oplatí sa teda pozrieť aj tie.
Autentifikácia používateľa v NodeJS pomocou Passport a MongoDB
Prečítajte si ďalej
Súvisiace témy
- Programovanie
- Bezpečnosť
- Programovanie
- Programovacie nástroje
- Google Authenticator
O autorovi
Mary Gathoni je softvérová vývojárka s vášňou pre vytváranie technického obsahu, ktorý je nielen informatívny, ale aj pútavý. Keď nekóduje alebo nepíše, rada sa stretáva s priateľmi a je vonku.
prihlásiť sa ku odberu noviniek
Pripojte sa k nášmu bulletinu a získajte technické tipy, recenzie, bezplatné e-knihy a exkluzívne ponuky!
Ak sa chcete prihlásiť na odber, kliknite sem