Hvis du nogensinde har brugt din Google-konto til at logge ind på et program, har du måske bemærket, hvor nemt det er. Du behøver kun at klikke på én knap og behøver ikke at indtaste din e-mail eller adgangskode. Selvom dette virker simpelt, er det, der sker under hætten, ret komplekst. Værktøjer som Passport gør det dog nemmere.

I denne vejledning lærer du, hvordan du implementerer Google-godkendelse i Node ved hjælp af Passport og Express.

Hvad er pas?

Pas (eller Passport.js) er en Node-godkendelses-middleware, der giver mere end 500 strategier til autentificering af brugere, herunder social autentificering ved hjælp af platforme som Google og Twitter.

Du vil bruge pas-google-oauth2 strategi til at autentificere brugere på Google.

Oprettelse af et Google Authentication System i Node

Dette er en oversigt over det autentificeringssystem, du vil oprette:

  • Når en bruger klikker på login-knappen, vil de blive sendt til Googles login-side, hvor de vil logge ind.
  • Google omdirigerer brugeren til din applikation med et adgangstoken. Adgangstokenet giver dig tilladelse til at få adgang til profiloplysningerne for den pågældende bruger.
    instagram viewer
  • Send adgangstokenet til Google for at få profildataene.
  • Opret en ny bruger eller hent den eksisterende bruger fra databasen.
  • Brug JWT'er til at beskytte følsomme ruter.

Sådan konfigureres Google-godkendelse i NodeJS ved hjælp af pas

Følg nedenstående trin for at godkende brugere med Google OAuth,

Trin 1: Opret et Google Client ID og Client Secret

Før du bruger Google til at logge brugere på din app, skal du registrere din applikation hos Google for at få klient-id'et og klienthemmeligheden til at bruge, når du konfigurerer Passport.

Log ind på Google Cloud-konsol og følg følgende trin for at registrere din app.

Opret et nyt projekt. Vælg i menulinjen Legitimationsoplysninger og vælg på rullelisten OAuth-klient-id.

For applikationstypen skal du vælge Webapplikation. Tilføj det foretrukne navn til din ansøgning i feltet Navn.

Under autoriserede omdirigerings-URI'er, brug http://localhost: 3000 og http://localhost: 3000/auth/google/callback for autoriserede omdirigerings-URI'er.

Klik skab for at oprette OAuth-klienten. Da app-legitimationsoplysningerne er følsomme, skal du oprette en .env fil og tilføje klient-id'et og klienthemmeligheden til den.

CLIENT_ID = 

CLIENT_SECRET =

Trin 2: Konfigurer Node Server

Opret en mappe, bruger-google-auth, og naviger til den.

mkdir bruger-google-auth
cd bruger-google-auth

Initialiser npm at skabe package.json.

npm init -y

Da du vil bruge express til oprette serveren, installer den ved at køre følgende kommando.

npm install Express

Åbn mappen med din foretrukne teksteditor, og opret en ny fil app.js. Det vil fungere som indgangspunktet for din ansøgning.

Opret NodeJS-serveren i app.js.

const express = require("express");
const app = express();
const PORT = 3000;
app.listen (PORT, () => {
console.log(`Lytter på port ${PORT}`);
});

Trin 2: Konfigurer MongoDB

Du gemmer brugerdata modtaget fra Google i en MongoDB database. Før du gemmer brugeroplysningerne, skal du definere den struktur, som dataene skal lagres i. Mongoose er perfekt til dette. Det giver en ret ligetil måde at skabe datamodeller på.

Installere mangust.

npm installere mongoose

Opret en ny fil userModel.js, og opret brugerskemaet.

const mongoose = require("mongoose");
const { Skema } = mongoose.model;
const UserSchema = new Schema({
google: {
id: {
type: streng,
},
navn: {
type: streng,
},
e-mail: {
type: streng,
},
},
});
const Bruger = mongoose.model("Bruger", BrugerSchema);
module.exports = Bruger;

I userModel.js, du har importeret mongoose og oprettet et nyt skema.

Bemærk, at du grupperer oplysningerne fra Google. Dette er især nyttigt, når du også bruger andre godkendelsesmetoder, og en bruger bruger mere end én. Det gør det nemmere at forhindre dobbeltregistrering.

Dernæst skal du oprette db.js.

const mongoose = require("mongoose");
mangust. Løfte = global. Løfte;
const dbUrl = "mongodb://localhost/bruger";
const connect = asynkron () => {
mongoose.connect (dbUrl, { useNewUrlParser: true, useUnifiedTopology: true });
const db = mongoose.forbindelse;
db.on("fejl", () => {
console.log("kunne ikke oprette forbindelse");
});
db.once("åben", () => {
console.log("> Forbundet til databasen med succes");
});
};
module.exports = { connect };

Opret forbindelse til databasen i app.js.

const express = require("express");
const app = express();
const PORT = 3000;
const db = require("./db");
db.connect();
app.listen (PORT, () => {
console.log(`Lytter på port ${PORT}`);
});

Trin 3: Konfigurer pas

Installere pas og pas-google-oauth2.

npm i pas pas-google-oauth2

Opret en ny fil, passportConfig.js, og importer Google-strategien fra pas-google-oauth2 og userModel.js.

const GoogleStrategy = require("passport-google-oauth2").Strategy;
const Bruger = require("./userModel");

Brug dine app-legitimationsoplysninger til at konfigurere pas med Google OAuth.

module.exports = (pas) => {
passport.use (ny GoogleStrategy({
klient-id: process.env. CLIENT_ID,
clientSecret: process.env. CLIENT_SECRET,
callbackURL: " http://localhost: 3000/auth/google/callback",
passReqToCallback: sand
},
async (request, accessToken, refreshToken, profile, done) => {
prøve {
lad eksisterende Bruger = await User.findOne({ 'google.id': profile.id });
// hvis brugeren findes returner brugeren
if (existingUser) {
returnering udført (nul, eksisterende bruger);
}
// hvis bruger ikke eksisterer, opret en ny bruger
console.log('Opretter ny bruger...');
const newUser = ny bruger({
metode: 'google',
google: {
id: profil.id,
navn: profil.displaynavn,
e-mail: profil.e-mails[0].værdi
}
});
vent newUser.save();
returnering udført (nul, nyBruger);
} fange (fejl) {
returnering udført (fejl, falsk)
}
}
));
}

Når du modtager profiloplysningerne fra Google, skal du kontrollere, om brugeren findes i databasen. Hvis de gør det, skal du blot returnere den fundne bruger. Hvis brugeren er ny, skal du oprette et nyt dokument i databasen og returnere den oprettede bruger.

Bemærk, at du arbejder med env variabler så brug npm pakke dotenv for at få adgang til dem i din applikation.

Installere dotenv.

npm installer dotenv

Brug dotenv i app.js.

require("dotenv").config()

I app.js,passere pas til passportConfig.js

const pas = require("pas");
require("./passportConfig")(pas);

Trin 4: Opret godkendelsesruter

Du skal bruge tre ruter til:

  • Omdiriger brugeren til Googles login-side for at få adgangstokenet.
  • Hent brugerdata ved hjælp af det modtagne adgangstoken.
  • Omdiriger brugeren til profilsiden efter vellykket godkendelse.
// Omdiriger brugeren til Googles login-side
app.get(
"/auth/google",
passport.authenticate("google", { scope: ["e-mail", "profile"] })
);
// Hent brugerdata ved hjælp af det modtagne adgangstoken
app.get(
"/auth/google/callback",
passport.authenticate("google", { session: false }),
(req, res) => {
res.redirect("/profil/");
}
);
// profil rute efter vellykket login
app.get("/profile", (req, res) => {
console.log (req);
res.send("Velkommen");
});

Trin 5: Beskyt private ruter

Nu hvor du er logget på som bruger, hvordan kan du så begrænse nogle dele af din applikation til kun godkendte brugere? En måde at gøre det på er at bruge JSON Web Tokens (JWT'er). JWT'er tilbyder en sikker måde at overføre informationen på. Til autorisere brugere ved at bruge JWT'er vil din ansøgning:

  • Generer et token ved hjælp af brugerdata.
  • Giv tokenet til brugeren (brugeren sender tokenet tilbage med anmodninger, der kræver godkendelse).
  • Bekræft det token, der er sendt tilbage.
  • Giv brugeren adgang, hvis det viste token er gyldigt.

Installere jsonwebtoken at arbejde med JWT'er.

npm installer jsonwebtoken

I app.js, import jsonwebtoken.

const jwt = require("jsonwebtoken")

Rediger Google-tilbagekalds-URL'en for at signere brugeren og generere et token.

app.get(
"/auth/google/callback",
passport.authenticate("google", { session: false }),
(req, res) => {
jwt.sign(
{ bruger: req.bruger },
"hemmelig nøgle",
{ expiresIn: "1h" },
(fejl, token) => {
if (fejl) {
returner res.json({
token: null,
});
}
res.json({
polet,
});
}
);
}
);

Hvis du logger ind, modtager du tokenet.

Brug derefter pas-jwt, en JWT-strategi leveret af Passport for at verificere tokenet og autorisere brugere.

npm installere pas-jwt

I passportConfig.js, tilføj JWT-strategien.

const JwtStrategy = require("pas-jwt").Strategi;
const { ExtractJwt } = require("pas-jwt");
module.exports = (pas) => {
passport.use (ny GoogleStrategy(
// Google strategi
);
pas.brug(
ny JwtStrategy(
{
jwtFromRequest: ExtractJwt.fromHeader("autorisation"),
secretOrKey: "secretKey",
},
async (jwtPayload, færdig) => {
prøve {
// Udpak bruger
const bruger = jwtPayload.user;
udført (nul, bruger);
} fange (fejl) {
udført (fejl, falsk);
}
}
)
);
}

Her udtrækker du tokenet fra autorisationshovedet, hvor det er gemt - hvilket er meget sikrere end at gemme det i anmodningsteksten.

Når tokenet er verificeret, sendes brugerobjektet tilbage til anmodningens krop. For at autorisere brugere skal du tilføje passet JWT-godkendelses-middleware til beskyttede ruter.

app.get(
"/profil",
passport.authenticate("jwt", { session: false }),
(req, res, næste) => {
res.send("Velkommen");
}
);

Nu vil kun anmodninger, der giver et gyldigt token, få adgang.

Næste skridt

Denne vejledning viste dig, hvordan du kan bruge Passport til at logge brugere på din applikation ved hjælp af deres Google-konto. Brug af Passport er meget enklere end andre former, og du vil spare en masse tid ved at bruge det.

Passport giver også andre godkendelsesstrategier til brug med andre identitetsudbydere, såsom Twitter og Facebook. Så det er også værd at tjekke dem ud.

Brugergodkendelse i NodeJS ved hjælp af Passport og MongoDB

Læs Næste

DelTweetDelE-mail

Relaterede emner

  • Programmering
  • Sikkerhed
  • Programmering
  • Programmeringsværktøjer
  • Google
  • Google Authenticator

Om forfatteren

Mary Gathoni (11 artikler udgivet)

Mary Gathoni er en softwareudvikler med en passion for at skabe teknisk indhold, der ikke kun er informativt, men også engagerende. Når hun ikke koder eller skriver, nyder hun at hænge ud med venner og være udendørs.

Mere fra Mary Gathoni

Abonner på vores nyhedsbrev

Tilmeld dig vores nyhedsbrev for tekniske tips, anmeldelser, gratis e-bøger og eksklusive tilbud!

Klik her for at abonnere