Pokud jste někdy použili svůj účet Google k přihlášení do aplikace, možná jste si všimli, jak snadné to je. Stačí kliknout na jedno tlačítko a nemusíte zadávat svůj e-mail ani heslo. I když to vypadá jednoduše, to, co se děje pod kapotou, je poměrně složité. Nástroje jako Passport to však usnadňují.
V tomto tutoriálu se dozvíte, jak implementovat ověřování Google v Node pomocí Passport a Express.
Co je cestovní pas?
Cestovní pas (nebo Passport.js) je middleware pro ověřování uzlů, který poskytuje více než 500 strategií pro ověřování uživatelů, včetně sociálního ověřování pomocí platforem jako Google a Twitter.
budete používat passport-google-oauth2 strategie ověřování uživatelů na Googlu.
Vytvoření ověřovacího systému Google v Node
Toto je přehled ověřovacího systému, který vytvoříte:
- Když uživatel klikne na přihlašovací tlačítko, bude přesměrován na přihlašovací stránku Google, kde se přihlásí.
- Google přesměruje uživatele do vaší aplikace pomocí přístupového tokenu. Přístupový token vám dává oprávnění k přístupu k informacím o profilu daného uživatele.
- Odešlete přístupový token společnosti Google, abyste získali data profilu.
- Vytvořte nového uživatele nebo načtěte stávajícího uživatele z databáze.
- Použijte JWT k ochraně citlivých cest.
Jak nastavit Google Authentication v NodeJS pomocí Passport
Chcete-li uživatele autorizovat pomocí protokolu Google OAuth, postupujte takto:
Krok 1: Vytvořte ID klienta Google a tajný klíč klienta
Než použijete Google k přihlašování uživatelů do své aplikace, musíte svou aplikaci zaregistrovat u Googlu, abyste získali ID klienta a tajný klíč klienta, které budete používat při konfiguraci služby Passport.
Přihlaste se do Konzole Google Cloud a podle následujících kroků zaregistrujte svou aplikaci.
Vytvořte nový projekt. Na panelu nabídek vyberte Pověření a v rozevíracím seznamu vyberte ID klienta OAuth.
Jako typ aplikace vyberte webová aplikace. Do pole Název přidejte preferovaný název aplikace.
V rámci autorizovaných URI přesměrování použijte http://localhost: 3000 a http://localhost: 3000/auth/google/callback pro autorizované URI přesměrování.
Klikněte vytvořit k vytvoření klienta OAuth. Protože přihlašovací údaje aplikace jsou citlivé, budete muset vytvořit a .env soubor a přidejte do něj ID klienta a tajný klíč klienta.
CLIENT_ID =CLIENT_SECRET =
Krok 2: Nastavte Node Server
Vytvořte složku, uživatel-google-auth, a navigovat k němu.
mkdir user-google-auth
cd uživatel-google-auth
Inicializovat npm vytvořit package.json.
npm init -y
Vzhledem k tomu, že budete používat expresní vytvořit server, nainstalujte jej spuštěním následujícího příkazu.
npm install express
Otevřete složku pomocí preferovaného textového editoru a vytvořte nový soubor app.js. Bude sloužit jako vstupní bod vaší aplikace.
Vytvořte server NodeJS v app.js.
const express = require("express");
const app = express();
const PORT = 3000;
app.listen (PORT, () => {
console.log(`Poslouchání na portu ${PORT}`);
});
Krok 2: Nastavte MongoDB
Uživatelská data přijatá od společnosti Google uložíte v a databáze MongoDB. Před uložením informací o uživateli je třeba definovat strukturu, ve které budou data uložena. Mongoose je na to jako stvořená. Poskytuje poměrně přímočarý způsob vytváření datových modelů.
Nainstalujte mangusta.
npm nainstalovat mongoose
Vytvořte nový soubor userModel.jsa vytvořte uživatelské schéma.
const mangoose = vyžadovat("mongoose");
const { Schema } = mongoose.model;
const UserSchema = nové schéma({
Google: {
id: {
typ: Řetězec,
},
název: {
typ: Řetězec,
},
e-mailem: {
typ: Řetězec,
},
},
});
const User = mongoose.model("Uživatel", UserSchema);
module.exports = Uživatel;
v userModel.js, importovali jste mongoose a vytvořili nové schéma.
Všimněte si, že seskupujete informace od Googlu. To je zvláště užitečné, když používáte také jiné metody ověřování a uživatel používá více než jednu. Usnadňuje zamezení dvojí registrace.
Dále vytvořte db.js.
const mangoose = vyžadovat("mongoose");
mangusta. Slib = globální. Slib;
const dbUrl = "mongodb://localhost/user";
const connect = async () => {
mongoose.connect (dbUrl, { useNewUrlParser: true, useUnifiedTopology: true });
const db = mongoose.connection;
db.on("chyba", () => {
console.log("nelze se připojit");
});
db.once("open", () => {
console.log("> Úspěšně připojeno k databázi");
});
};
module.exports = { připojit };
Připojte se k databázi v app.js.
const express = require("express");
const app = express();
const PORT = 3000;
const db = vyžadovat("./db");
db.connect();
app.listen (PORT, () => {
console.log(`Poslouchání na portu ${PORT}`);
});
Krok 3: Nastavte Passport
Nainstalujte cestovní pas a passport-google-oauth2.
npm i pas passport-google-oauth2
Vytvořte nový soubor, passportConfig.jsa importujte strategii Google z passport-google-oauth2 a userModel.js.
const GoogleStrategy = require("passport-google-oauth2").Strategie;
const User = require("./userModel");
Ke konfiguraci použijte přihlašovací údaje aplikace cestovní pas s Google OAuth.
module.exports = (pas) => {
passport.use (nová strategie 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) => {
Snaž se {
let stávající uživatel = wait User.findOne({ 'google.id': profile.id });
// pokud uživatel existuje, vrátí uživatele
if (existující uživatel) {
return done (null, stávající uživatel);
}
// pokud uživatel neexistuje, vytvořte nového uživatele
console.log('Vytváření nového uživatele...');
const newUser = nový uživatel({
metoda: 'google',
Google: {
id: profile.id,
jméno: profile.displayName,
email: profil.e-maily[0].hodnota
}
});
čekat newUser.save();
return done (null, newUser);
} catch (chyba) {
návrat proveden (chyba, nepravda)
}
}
));
}
Jakmile od společnosti Google obdržíte informace o profilu, zkontrolujte, zda daný uživatel v databázi existuje. Pokud ano, jednoduše vraťte nalezeného uživatele. Pokud je uživatel nový, vytvořte nový dokument v databázi a vraťte vytvořeného uživatele.
Všimněte si, že pracujete s env proměnné, takže použijte npm balík dotenv abyste k nim měli přístup ve své aplikaci.
Nainstalujte dotenv.
npm nainstalovat dotenv
Použití dotenv v app.js.
vyžadovat("dotenv").config()
v app.js,složit cestovní pas na passportConfig.js
const pas = vyžadovat("pas");
vyžadovat("./passportConfig")(pas);
Krok 4: Vytvořte ověřovací trasy
K tomu potřebujete tři cesty:
- Přesměrujte uživatele na přihlašovací stránku Google, kde získáte přístupový token.
- Získejte uživatelská data pomocí přijatého přístupového tokenu.
- Poté přesměrujte uživatele na stránku profilu úspěšné ověření.
// Přesměrujte uživatele na přihlašovací stránku Google
app.get(
"/auth/google",
passport.authenticate("google", { rozsah: ["e-mail", "profil"] })
);
// Načtení uživatelských dat pomocí přijatého přístupového tokenu
app.get(
"/auth/google/callback",
passport.authenticate("google", { session: false }),
(req, res) => {
res.redirect("/profil/");
}
);
// trasa profilu po úspěšném přihlášení
app.get("/profile", (req, res) => {
console.log (req);
res.send("Vítejte");
});
Krok 5: Chraňte soukromé trasy
Nyní, když jste se přihlásili jako uživatel, jak můžete omezit některé části vaší aplikace pouze na ověřené uživatele? Jedním ze způsobů, jak toho dosáhnout, je použití webových tokenů JSON (JWT). JWT nabízejí bezpečný způsob přenosu informací. Na autorizovat uživatele pomocí JWT bude vaše aplikace:
- Vygenerujte token pomocí uživatelských dat.
- Předejte token uživateli (uživatel zašle token zpět s požadavky, které vyžadují autorizaci).
- Ověřte odeslaný token.
- Udělte uživateli přístup, pokud je předložený token platný.
Nainstalujte jsonwebtoken pracovat s JWT.
npm nainstalujte jsonwebtoken
v app.js, import jsonwebtoken.
const jwt = vyžadovat("jsonwebtoken")
Upravte adresu URL zpětného volání Google, abyste podepsali uživatele a vygenerovali token.
app.get(
"/auth/google/callback",
passport.authenticate("google", { session: false }),
(req, res) => {
jwt.sign(
{ uživatel: req.user },
"tajný klíč",
{ expiresIn: "1h" },
(chyba, token) => {
if (chyba) {
return res.json({
token: null,
});
}
res.json({
žeton,
});
}
);
}
);
Pokud se přihlásíte, obdržíte token.
Dále použijte pas-jwt, strategie JWT poskytovaná společností Passport k ověření tokenu a autorizaci uživatelů.
npm install passport-jwt
v passportConfig.js, přidejte strategii JWT.
const JwtStrategy = require("passport-jwt").Strategie;
const { ExtractJwt } = require("passport-jwt");
module.exports = (pas) => {
passport.use (nová strategie Google(
// strategie Google
);
passport.use(
nová JwtStrategy(
{
jwtFromRequest: ExtractJwt.fromHeader("autorization"),
secretOrKey: "secretKey",
},
async (jwtPayload, hotovo) => {
Snaž se {
// Extrahujte uživatele
const user = jwtPayload.user;
hotovo (null, uživatel);
} catch (chyba) {
hotovo (chyba, nepravda);
}
}
)
);
}
Zde extrahujete token z autorizační hlavičky, kde je uložen – což je mnohem bezpečnější než jeho ukládání do těla požadavku.
Jakmile je token ověřen, objekt uživatele je odeslán zpět do těla požadavku. Chcete-li autorizovat uživatele, přidejte do chráněných tras autentizační middleware JWT.
app.get(
"/profil",
passport.authenticate("jwt", { session: false }),
(požadavek, res, další) => {
res.send("Vítejte");
}
);
Nyní získají přístup pouze požadavky, které poskytují platný token.
Další kroky
Tento výukový program vám ukázal, jak můžete pomocí služby Passport přihlašovat uživatele do aplikace pomocí jejich účtu Google. Používání Passportu je mnohem jednodušší než u jiných formulářů a jeho používáním ušetříte spoustu času.
Passport také poskytuje další autentizační strategie pro použití s jinými poskytovateli identity, jako je Twitter a Facebook. Takže stojí za to se na ně také podívat.
Autentizace uživatele v NodeJS pomocí Passport a MongoDB
Přečtěte si další
Související témata
- Programování
- Bezpečnostní
- Programování
- Programovací nástroje
- Google Authenticator
O autorovi
Mary Gathoni je vývojář softwaru s vášní pro vytváření technického obsahu, který je nejen informativní, ale také poutavý. Když zrovna nekóduje nebo nepíše, ráda se poflakuje s přáteli a je venku.
Přihlaste se k odběru našeho newsletteru
Připojte se k našemu zpravodaji a získejte technické tipy, recenze, bezplatné e-knihy a exkluzivní nabídky!
Chcete-li se přihlásit k odběru, klikněte sem