Ja kādreiz esat izmantojis savu Google kontu, lai pierakstītos lietojumprogrammā, iespējams, pamanījāt, cik tas ir vienkārši. Jums jānoklikšķina tikai uz vienas pogas un nav jāievada e-pasts vai parole. Lai gan tas šķiet vienkārši, tas, kas notiek zem pārsega, ir diezgan sarežģīts. Tomēr tādi rīki kā Passport to atvieglo.

Šajā apmācībā jūs uzzināsit, kā ieviest Google autentifikāciju Node, izmantojot Passport un Express.

Kas ir pase?

Pase (vai Passport.js) ir mezgla autentifikācijas starpprogrammatūra, kas nodrošina vairāk nekā 500 lietotāju autentifikācijas stratēģijas, tostarp sociālo autentifikāciju, izmantojot tādas platformas kā Google un Twitter.

Jūs izmantosiet pass-google-oauth2 stratēģija lietotāju autentificēšanai Google tīklā.

Google autentifikācijas sistēmas izveide pakalpojumā Node

Šis ir izveidotās autentifikācijas sistēmas pārskats:

  • Kad lietotājs noklikšķina uz pieteikšanās pogas, viņš tiks nosūtīts uz Google pierakstīšanās lapu, kurā viņš pierakstīsies.
  • Google novirzīs lietotāju uz jūsu lietojumprogrammu, izmantojot piekļuves pilnvaru. Piekļuves pilnvara dod jums atļauju piekļūt šī lietotāja profila informācijai.
    instagram viewer
  • Nosūtiet piekļuves pilnvaru uzņēmumam Google, lai iegūtu profila datus.
  • Izveidojiet jaunu lietotāju vai izgūstiet esošo lietotāju no datu bāzes.
  • Izmantojiet JWT, lai aizsargātu jutīgus maršrutus.

Kā iestatīt Google autentifikāciju NodeJS, izmantojot Passport

Veiciet tālāk norādītās darbības, lai autorizētu lietotājus ar Google OAuth,

1. darbība. Izveidojiet Google klienta ID un klienta noslēpumu

Pirms izmantojat Google, lai pierakstītos lietotāji savā lietotnē, jums ir jāreģistrē sava lietojumprogramma Google tīklā, lai iegūtu klienta ID un klienta noslēpumu, ko izmantot, konfigurējot Passport.

Piesakieties vietnē Google mākoņa konsole un veiciet tālāk norādītās darbības, lai reģistrētu savu lietotni.

Izveidojiet jaunu projektu. Izvēļņu joslā atlasiet Akreditācijas dati un nolaižamajā sarakstā atlasiet OAuth klienta ID.

Lietojumprogrammas veidam atlasiet Tīmekļa lietojumprogramma. Laukā Nosaukums pievienojiet savai lietojumprogrammai vēlamo nosaukumu.

Saskaņā ar autorizētajiem novirzīšanas URI izmantojiet http://localhost: 3000 un http://localhost: 3000/auth/google/callback autorizētiem novirzīšanas URI.

Klikšķis izveidot lai izveidotu OAuth klientu. Tā kā lietotnes akreditācijas dati ir sensitīvi, jums būs jāizveido a .env failu un pievienojiet tam klienta ID un klienta noslēpumu.

KLIENTA_ID = 

CLIENT_SECRET =

2. darbība: iestatiet mezgla serveri

Izveidojiet mapi, user-google-auth, un dodieties uz to.

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

Palaist npm radīt pack.json.

npm init -y

Tā kā jūs izmantosit eksprespasta adresi izveidot serveri, instalējiet to, izpildot šādu komandu.

npm install express

Atveriet mapi ar vēlamo teksta redaktoru un izveidojiet jaunu failu app.js. Tas kalpos kā jūsu pieteikuma ievades punkts.

Izveidojiet NodeJS serveri app.js.

const izteikt = prasīt ("izteikt");
const app = express();
const PORT = 3000;
app.listen (PORT, () => {
console.log(`Klausās portā ${PORT}`);
});

2. darbība: iestatiet MongoDB

Jūs glabāsit no Google saņemtos lietotāja datus a MongoDB datu bāze. Pirms lietotāja informācijas saglabāšanas ir jādefinē struktūra, kurā dati tiks glabāti. Mangusts tam ir lieliski piemērots. Tas nodrošina diezgan vienkāršu veidu, kā izveidot datu modeļus.

Uzstādīt mangusts.

npm instalēt mongoose

Izveidojiet jaunu failu userModel.jsun izveidojiet lietotāja shēmu.

const mangusts = prasīt("mangusts");
const {shēma} = mangusts.modelis;
const UserSchema = new Schema({
google: {
id: {
tips: virkne,
},
vārds: {
tips: virkne,
},
e-pasts: {
tips: virkne,
},
},
});
const Lietotājs = mongoose.model("Lietotājs", UserSchema);
module.exports = Lietotājs;

In userModel.js, jūs esat importējis mangustu un izveidojis jaunu shēmu.

Ņemiet vērā, ka grupējat informāciju no Google. Tas ir īpaši noderīgi, ja izmantojat arī citas autentifikācijas metodes un lietotājs izmanto vairākas. Tas atvieglo dubultās reģistrācijas novēršanu.

Tālāk izveidojiet db.js.

const mangusts = prasīt("mangusts");
mangusts. Solījums = globāls. Solījums;
const dbUrl = "mongodb://localhost/user";
const connect = async () => {
mongoose.connect (dbUrl, { useNewUrlParser: true, useUnifiedTopology: true });
const db = mangusts.savienojums;
db.on("kļūda", () => {
console.log("nevarēja izveidot savienojumu");
});
db.once("atvērt", () => {
console.log("> Veiksmīgi savienots ar datu bāzi");
});
};
module.exports = {savienot};

Izveidojiet savienojumu ar datu bāzi app.js.

const izteikt = prasīt ("izteikt");
const app = express();
const PORT = 3000;
const db = prasīt("./db");
db.connect();
app.listen (PORT, () => {
console.log(`Klausās portā ${PORT}`);
});

3. darbība: iestatiet pasi

Uzstādīt pase un pass-google-oauth2.

npm i pase passport-google-oauth2

Izveidojiet jaunu failu, passConfig.jsun importējiet Google stratēģiju no pass-google-oauth2 un userModel.js.

const GoogleStrategy = prasīt("passport-google-oauth2").Stratēģija;
const Lietotājs = prasīt("./lietotājaModelis");

Lai konfigurētu, izmantojiet savas lietotnes akreditācijas datus pase ar Google OAuth.

module.exports = (pase) => {
passport.use (jaunā GoogleStrategy({
klienta ID: process.env. CLIENT_ID,
klienta noslēpums: process.env. CLIENT_SECRET,
atzvanīšanas URL: " http://localhost: 3000/auth/google/callback",
passReqToCallback: patiess
},
async (pieprasījums, piekļuves pilnvara, atsvaidzināšanas atļauja, profils, pabeigts) => {
mēģināt {
let esošaisUser = gaidīt User.findOne({ 'google.id': profile.id });
// ja lietotājs pastāv, atgriež lietotāju
if (esošais lietotājs) {
atgriešana darīts (null, esošaisUser);
}
// ja lietotājs neeksistē, izveido jaunu lietotāju
console.log('Notiek jauna lietotāja izveide...');
const newUser = jauns lietotājs({
metode: "google",
google: {
id: profile.id,
nosaukums: profile.displayName,
e-pasts: profile.emails[0].value
}
});
gaidiet newUser.save();
atgriešana darīta (null, newUser);
} nozveja (kļūda) {
atgriešana pabeigta (kļūda, nepatiesa)
}
}
));
}

Kad esat saņēmis profila informāciju no Google, pārbaudiet, vai lietotājs pastāv datu bāzē. Ja viņi to dara, vienkārši atgrieziet atrasto lietotāju. Ja lietotājs ir jauns, izveidojiet jaunu dokumentu datu bāzē un atgrieziet izveidoto lietotāju.

Ņemiet vērā, ka strādājat ar env mainīgos, tāpēc izmantojiet npm iepakojums dotenv lai piekļūtu tiem savā lietojumprogrammā.

Uzstādīt dotenv.

npm instalēt dotenv

Izmantot dotenv iekšā app.js.

prasīt("dotenv").config()

In app.js, pass pase uz passConfig.js

const pass = prasīt("pase");
prasīt("./passportConfig")(pase);

4. darbība. Izveidojiet autentifikācijas maršrutus

Jums ir nepieciešami trīs maršruti, lai:

  • Novirziet lietotāju uz Google pierakstīšanās lapu, lai iegūtu piekļuves pilnvaru.
  • Izgūt lietotāja datus, izmantojot saņemto piekļuves pilnvaru.
  • Pēc tam novirziet lietotāju uz profila lapu veiksmīga autentifikācija.
// Novirziet lietotāju uz Google pierakstīšanās lapu
app.get(
"/auth/google",
passport.authenticate("google", { tvērums: ["e-pasts", "profils"] })
);
// Izgūstiet lietotāja datus, izmantojot saņemto piekļuves pilnvaru
app.get(
"/auth/google/callback",
passport.authenticate("google", { session: false }),
(req, res) => {
res.redirect("/profils/");
}
);
// profila maršruts pēc veiksmīgas pierakstīšanās
app.get("/profile", (req, res) => {
console.log (req);
res.send("Laipni lūdzam");
});

5. darbība: aizsargājiet privātos maršrutus

Tagad, kad esat pieteicies kā lietotājs, kā varat ierobežot dažas lietojumprogrammas daļas tikai autentificētiem lietotājiem? Viens veids, kā to izdarīt, ir izmantot JSON tīmekļa marķierus (JWT). JWT piedāvā drošu informācijas pārsūtīšanas veidu. Uz autorizēt lietotājus izmantojot JWT, jūsu lietojumprogramma:

  • Ģenerējiet marķieri, izmantojot lietotāja datus.
  • Nododiet marķieri lietotājam (lietotājs nosūtīs to atpakaļ ar pieprasījumiem, kuriem nepieciešama autorizācija).
  • Pārbaudiet atpakaļ nosūtīto marķieri.
  • Piešķiriet lietotājam piekļuvi, ja uzrādītais marķieris ir derīgs.

Uzstādīt jsonwebtoken strādāt ar JWT.

npm instalēt jsonwebtoken

In app.js, imports jsonwebtoken.

const jwt = prasīt ("jsonwebtoken")

Mainiet Google atzvanīšanas URL, lai parakstītu lietotāju un ģenerētu pilnvaru.

app.get(
"/auth/google/callback",
passport.authenticate("google", { session: false }),
(req, res) => {
jwt.sign(
{lietotājs: req.user},
"slepenā atslēga",
{ derīguma termiņš: "1h" },
(kļūda, marķieris) => {
if (err) {
return res.json({
marķieris: null,
});
}
res.json({
žetons,
});
}
);
}
);

Piesakoties, jūs saņemsit tokenu.

Tālāk izmantojiet pase-jwt, JWT stratēģija, ko nodrošina Passport, lai pārbaudītu marķieri un autorizētu lietotājus.

npm instalējiet pass-jwt

In passConfig.js, pievienojiet JWT stratēģiju.

const JwtStrategy = prasīt("pase-jwt").Stratēģija;
const { ExtractJwt } = prasīt("passe-jwt");
module.exports = (pase) => {
passport.use (jaunā GoogleStrategy(
// Google stratēģija
);
pass.use(
jauna JwtStrategy(
{
jwtFromRequest: ExtractJwt.fromHeader("autorizācija"),
secretOrKey: "secretKey",
},
async (jwtPayload, gatavs) => {
mēģināt {
// Izvilkt lietotāju
const lietotājs = jwtPayload.user;
darīts (nulle, lietotājs);
} nozveja (kļūda) {
darīts (kļūda, nepatiess);
}
}
)
);
}

Šeit jūs izņemat pilnvaru no autorizācijas galvenes, kur tā tiek glabāta, — tas ir daudz drošāk nekā glabāšana pieprasījuma pamattekstā.

Kad marķieris ir pārbaudīts, lietotāja objekts tiek nosūtīts atpakaļ uz pieprasījuma pamattekstu. Lai autorizētu lietotājus, aizsargātajiem maršrutiem pievienojiet pases JWT autentifikācijas starpprogrammatūru.

app.get(
"/profils",
passport.authenticate("jwt", { session: false }),
(req, res, next) => {
res.send("Laipni lūdzam");
}
);

Tagad varēs piekļūt tikai tie pieprasījumi, kas nodrošina derīgu pilnvaru.

Nākamie soļi

Šajā apmācībā tika parādīts, kā varat izmantot Passport, lai pierakstītos savā lietojumprogrammā, izmantojot viņu Google kontu. Passport izmantošana ir daudz vienkāršāka nekā citas veidlapas, un tās izmantošana ietaupīs daudz laika.

Pase nodrošina arī citas autentifikācijas stratēģijas, ko izmantot ar citiem identitātes nodrošinātājiem, piemēram, Twitter un Facebook. Tāpēc ir vērts pārbaudīt arī tos.

Lietotāja autentifikācija pakalpojumā NodeJS, izmantojot Passport un MongoDB

Lasiet Tālāk

DalītiesČivinātDalītiesE-pasts

Saistītās tēmas

  • Programmēšana
  • Drošība
  • Programmēšana
  • Programmēšanas rīki
  • Google
  • Google autentifikators

Par autoru

Marija Gatoni (11 publicēti raksti)

Mary Gathoni ir programmatūras izstrādātāja, kuras aizraušanās ir tāda tehniska satura izveide, kas ir ne tikai informatīvs, bet arī saistošs. Kad viņa nekodē vai neraksta, viņai patīk pavadīt laiku ar draugiem un būt ārā.

Vairāk no Mary Gathoni

Abonējiet mūsu biļetenu

Pievienojieties mūsu informatīvajam izdevumam, lai saņemtu tehniskos padomus, pārskatus, bezmaksas e-grāmatas un ekskluzīvus piedāvājumus!

Noklikšķiniet šeit, lai abonētu