Ako ste ikada koristili svoj Google račun za prijavu na aplikaciju, možda ste primijetili kako je to jednostavno. Morate kliknuti samo jedan gumb i ne morate upisivati ​​svoju e-poštu ili lozinku. Iako se ovo čini jednostavnim, ono što se događa ispod haube prilično je složeno. Međutim, alati kao što je Passport to olakšavaju.

U ovom vodiču naučit ćete kako implementirati Google autentifikaciju u Node koristeći Passport i Express.

Što je putovnica?

Putovnica (ili Passport.js) je međuverzija za provjeru autentičnosti čvora koja nudi više od 500 strategija za provjeru autentičnosti korisnika uključujući društvenu provjeru autentičnosti pomoću platformi kao što su Google i Twitter.

Vi ćete koristiti putovnica-google-oauth2 strategija za provjeru autentičnosti korisnika na Googleu.

Izrada Google sustava provjere autentičnosti u Nodeu

Ovo je pregled sustava za provjeru autentičnosti koji ćete izraditi:

  • Kada korisnik klikne na gumb za prijavu, bit će poslan na stranicu za prijavu na Google gdje će se prijaviti.
  • instagram viewer
  • Google će preusmjeriti korisnika na vašu aplikaciju s tokenom za pristup. Pristupni token daje vam dopuštenje za pristup podacima o profilu tog korisnika.
  • Pošaljite token za pristup Googleu da dobijete podatke o profilu.
  • Stvorite novog korisnika ili dohvatite postojećeg korisnika iz baze podataka.
  • Koristite JWT-ove za zaštitu osjetljivih ruta.

Kako postaviti Google autentifikaciju u NodeJS pomoću putovnice

Slijedite korake u nastavku za autorizaciju korisnika s Google OAuthom,

1. korak: izradite ID Google klijenta i tajnu tajnu klijenta

Prije upotrebe Googlea za prijavu korisnika u svoju aplikaciju, trebate registrirati svoju aplikaciju na Googleu kako biste dobili ID klijenta i tajnu klijenta za korištenje prilikom konfiguriranja putovnice.

Prijavite se na Google Cloud konzola i slijedite sljedeće korake da biste registrirali svoju aplikaciju.

Napravite novi projekt. Na traci izbornika odaberite vjerodajnice i na padajućem popisu odaberite ID OAuth klijenta.

Za vrstu aplikacije odaberite Web aplikacija. Dodajte željeni naziv za svoju aplikaciju u polje Naziv.

Pod ovlaštenim URI-jima preusmjeravanja, koristite http://localhost: 3000 i http://localhost: 3000/auth/google/callback za autorizirane URI-je preusmjeravanja.

Klik stvoriti za stvaranje OAuth klijenta. Budući da su vjerodajnice aplikacije osjetljive, morat ćete izraditi a .env datoteku i dodajte joj ID klijenta i tajnu klijenta.

CLIENT_ID = 

CLIENT_SECRET =

Korak 2: Postavite poslužitelj čvorova

Napravite mapu, user-google-auth, i dođite do njega.

mkdir user-google-auth
cd korisnik-google-auth

Inicijalizirati npm stvoriti paket.json.

npm init -y

Budući da ćete koristiti express za stvoriti poslužitelj, instalirajte ga pokretanjem sljedeće naredbe.

npm install express

Otvorite mapu u željenom uređivaču teksta i stvorite novu datoteku app.js. Služit će kao ulazna točka vaše aplikacije.

Napravite NodeJS poslužitelj u app.js.

const express = zahtijevati("izraziti");
const app = express();
const PORT = 3000;
app.listen (PORT, () => {
console.log(`Slušanje na portu ${PORT}`);
});

Korak 2: Postavite MongoDB

Korisničke podatke primljene od Googlea pohranit ćete u a MongoDB baza podataka. Prije spremanja podataka o korisniku morate definirati strukturu u kojoj će podaci biti pohranjeni. Mongoose je savršen za ovo. Pruža prilično jednostavan način stvaranja modela podataka.

Instalirati mungos.

npm instaliraj mungoose

Napravite novu datoteku userModel.jsi kreirajte korisničku shemu.

const mungoose = zahtijevaju("mungoose");
const { Shema } = mongoose.model;
const UserSchema = nova shema ({
google: {
iskaznica: {
vrsta: niz,
},
Ime: {
vrsta: niz,
},
email: {
vrsta: niz,
},
},
});
const Korisnik = mongoose.model("Korisnik", korisnička shema);
module.exports = Korisnik;

U userModel.js, uvezli ste mungosa i stvorili novu shemu.

Primijetite da grupirate podatke s Googlea. Ovo je posebno korisno kada također koristite druge metode provjere autentičnosti, a korisnik koristi više od jedne. To olakšava sprječavanje dvostruke registracije.

Zatim kreirajte db.js.

const mungoose = zahtijevaju("mungoose");
mungos. Obećanje = globalno. Obećanje;
const dbUrl = "mongodb://localhost/user";
const connect = async () => {
mongoose.connect (dbUrl, { useNewUrlParser: true, useUnifiedTopology: true });
const db = mungoose.veza;
db.on("greška", () => {
console.log("ne mogu se povezati");
});
db.once("otvori", () => {
console.log("> Uspješno povezan s bazom podataka");
});
};
module.exports = { povezati };

Povežite se s bazom podataka u app.js.

const express = zahtijevati("izraziti");
const app = express();
const PORT = 3000;
const db = zahtijevaju("./db");
db.connect();
app.listen (PORT, () => {
console.log(`Slušanje na portu ${PORT}`);
});

Korak 3: Postavite putovnicu

Instalirati putovnica i putovnica-google-oauth2.

npm i putovnica putovnica-google-oauth2

Napravite novu datoteku, passportConfig.jsi uvezite Google strategiju iz putovnica-google-oauth2 i userModel.js.

const GoogleStrategy = require("passport-google-oauth2").Strategija;
const Korisnik = zahtijeva ("./userModel");

Za konfiguraciju koristite vjerodajnice svoje aplikacije putovnica uz Google OAuth.

module.exports = (putovnica) => {
passport.use (nova GoogleStrategy({
ID klijenta: proces.env. CLIENT_ID,
clientSecret: proces.env. CLIENT_SECRET,
callbackURL: " http://localhost: 3000/auth/google/callback",
passReqToCallback: istina
},
async (zahtjev, accessToken, refreshToken, profil, gotovo) => {
probaj {
neka postojećiUser = čekaj User.findOne({ 'google.id': profile.id });
// ako korisnik postoji vrati korisnika
ako (postojeći korisnik) {
vratiti učinjeno (null, postojećiKorisnik);
}
// ako korisnik ne postoji stvori novog korisnika
console.log('Stvaranje novog korisnika...');
const newUser = novi korisnik({
metoda: 'google',
google: {
id: profile.id,
naziv: profile.displayName,
e-pošta: profil.e-pošta[0].vrijednost
}
});
čekati novogUser.save();
vratiti učinjeno (null, newUser);
} uhvatiti (pogreška) {
vraćanje gotovo (pogreška, netočno)
}
}
));
}

Nakon što primite podatke o profilu od Googlea, provjerite postoji li korisnik u bazi podataka. Ako učine, jednostavno vratite pronađenog korisnika. Ako je korisnik nov, kreirajte novi dokument u bazi podataka i vratite kreiranog korisnika.

Imajte na umu da radite s okr varijable pa koristite npm paket dotenv da im pristupite u svojoj aplikaciji.

Instalirati dotenv.

npm instalirati dotenv

Koristiti dotenv u app.js.

zahtijevaju("dotenv").config()

U app.js,proći putovnica do passportConfig.js

const putovnica = zahtijeva ("putovnica");
zahtijevaju("./passportConfig")(putovnica);

Korak 4: Stvorite rute provjere autentičnosti

Potrebna su vam tri puta za:

  • Preusmjerite korisnika na stranicu za prijavu na Google da dobije token za pristup.
  • Dohvatite korisničke podatke pomoću primljenog tokena za pristup.
  • Nakon toga preusmjerite korisnika na stranicu profila uspješna autentifikacija.
// Preusmjerite korisnika na stranicu za prijavu na Google
app.get(
"/auth/google",
passport.authenticate("google", { opseg: ["e-pošta", "profil"] })
);
// Dohvaćanje korisničkih podataka pomoću primljenog tokena za pristup
app.get(
"/auth/google/callback",
passport.authenticate("google", { session: false }),
(req, res) => {
res.redirect("/profil/");
}
);
// ruta profila nakon uspješne prijave
app.get("/profile", (req, res) => {
console.log (req);
res.send("Dobrodošli");
});

Korak 5: Zaštitite privatne rute

Sada kada ste se prijavili kao korisnik, kako možete ograničiti neke dijelove svoje aplikacije samo na provjerene korisnike? Jedan od načina za to je korištenje JSON web tokena (JWT). JWT-ovi nude siguran način prijenosa informacija. Do autorizirati korisnike koristeći JWT, vaša će aplikacija:

  • Generirajte token koristeći korisničke podatke.
  • Proslijedite token korisniku (korisnik će vratiti token sa zahtjevima za koje je potrebna autorizacija).
  • Potvrdite da je token poslan natrag.
  • Omogućite pristup korisniku ako je predstavljeni token valjan.

Instalirati jsonwebtoken za rad s JWT-ovima.

npm instaliraj jsonwebtoken

U app.js, uvoz jsonwebtoken.

const jwt = zahtijeva ("jsonwebtoken")

Izmijenite URL Google povratnog poziva da biste potpisali korisnika i generirali token.

app.get(
"/auth/google/callback",
passport.authenticate("google", { session: false }),
(req, res) => {
jwt.sign(
{ korisnik: req.user },
"tajni ključ",
{ expiresIn: "1h" },
(err, token) => {
ako (err) {
vrati res.json({
token: null,
});
}
res.json({
znak,
});
}
);
}
);

Ako se prijavite, dobit ćete token.

Dalje, koristite putovnica-jwt, JWT strategija koju pruža Passport za provjeru tokena i autorizaciju korisnika.

npm install passport-jwt

U passportConfig.js, dodajte strategiju JWT.

const JwtStrategy = zahtijevaju("passport-jwt").Strategija;
const { ExtractJwt } = zahtijevaju("passport-jwt");
module.exports = (putovnica) => {
passport.use (nova GoogleStrategy(
// Google strategija
);
putovnica.upotreba(
nova JwtStrategy(
{
jwtFromRequest: ExtractJwt.fromHeader("autorizacija"),
secretOrKey: "secretKey",
},
async (jwtPayload, gotovo) => {
probaj {
// Izdvoj korisnika
const korisnik = jwtPayload.user;
učinjeno (null, korisnik);
} uhvatiti (pogreška) {
učinjeno (pogreška, netočno);
}
}
)
);
}

Ovdje izvlačite token iz autorizacijskog zaglavlja gdje je pohranjen — što je puno sigurnije od pohranjivanja u tijelo zahtjeva.

Nakon što je token verificiran, korisnički objekt se šalje natrag tijelu zahtjeva. Da biste autorizirali korisnike, dodajte međuopremu za JWT autentifikaciju putovnice zaštićenim rutama.

app.get(
"/profil",
passport.authenticate("jwt", { session: false }),
(req, res, next) => {
res.send("Dobrodošli");
}
);

Sada će pristup dobiti samo zahtjevi koji daju valjani token.

Sljedeći koraci

Ovaj vam je vodič pokazao kako možete koristiti Passport za prijavu korisnika u svoju aplikaciju pomoću njihovog Google računa. Korištenje putovnice puno je jednostavnije od ostalih obrazaca, a korištenjem ćete uštedjeti puno vremena.

Putovnica također pruža druge strategije provjere autentičnosti za korištenje s drugim pružateljima identiteta, kao što su Twitter i Facebook. Dakle, vrijedi ih i provjeriti.

Autentifikacija korisnika u NodeJS-u pomoću putovnice i MongoDB-a

Pročitajte dalje

UdioCvrkutUdioE-mail

Povezane teme

  • Programiranje
  • Sigurnost
  • Programiranje
  • Alati za programiranje
  • Google
  • Google autentifikator

O autoru

Mary Gathoni (Objavljeno 11 članaka)

Mary Gathoni je programer softvera sa strašću za stvaranje tehničkog sadržaja koji nije samo informativan već i privlačan. Kad ne kodira i ne piše, uživa u druženju s prijateljima i na otvorenom.

Više od Mary Gathoni

Pretplatite se na naše obavijesti

Pridružite se našem biltenu za tehničke savjete, recenzije, besplatne e-knjige i ekskluzivne ponude!

Kliknite ovdje za pretplatu