Jei kada nors naudojote „Google“ paskyrą prisijungdami prie programos, galbūt pastebėjote, kaip tai paprasta. Jums tereikia spustelėti vieną mygtuką ir nereikės įvesti el. pašto ar slaptažodžio. Nors tai atrodo paprasta, tai, kas vyksta po gaubtu, yra gana sudėtinga. Tačiau tokie įrankiai kaip „Passport“ tai palengvina.
Šiame vadove sužinosite, kaip įdiegti „Google“ autentifikavimą „Node“ naudojant „Passport“ ir „Express“.
Kas yra Pasas?
Pasas (arba Passport.js) yra mazgo autentifikavimo tarpinė programinė įranga, teikianti daugiau nei 500 vartotojų autentifikavimo strategijų, įskaitant socialinį autentifikavimą naudojant tokias platformas kaip Google ir Twitter.
Jūs naudosite pass-google-oauth2 strategija, kaip autentifikuoti naudotojus sistemoje „Google“.
„Google“ autentifikavimo sistemos kūrimas „Node“.
Tai autentifikavimo sistemos, kurią sukursite, apžvalga:
- Kai vartotojas spustelėja prisijungimo mygtuką, jis bus nukreiptas į „Google“ prisijungimo puslapį, kuriame jis prisijungs.
- „Google“ nukreips vartotoją į jūsų programą su prieigos prieigos raktu. Prieigos prieigos raktas suteikia jums leidimą pasiekti to vartotojo profilio informaciją.
- Išsiųskite prieigos raktą „Google“, kad gautumėte profilio duomenis.
- Sukurkite naują vartotoją arba nuskaitykite esamą vartotoją iš duomenų bazės.
- Naudokite JWT jautriems maršrutams apsaugoti.
Kaip nustatyti „Google“ autentifikavimą „NodeJS“ naudojant „Passport“.
Atlikite toliau nurodytus veiksmus, kad įgaliotumėte naudotojus naudoti „Google OAuth“,
1 veiksmas: sukurkite „Google“ kliento ID ir kliento paslaptį
Prieš naudodami „Google“ naudotojams prisijungdami prie programos, turite užregistruoti programą „Google“, kad gautumėte kliento ID ir kliento paslaptį, kuriuos būtų galima naudoti konfigūruojant „Passport“.
Prisijunkite prie Google Cloud konsolė ir atlikite toliau nurodytus veiksmus, kad užregistruotumėte programą.
Sukurkite naują projektą. Meniu juostoje pasirinkite Įgaliojimai ir išskleidžiamajame sąraše pasirinkite „OAuth“ kliento ID.
Norėdami nustatyti programos tipą, pasirinkite Žiniatinklio programa. Lauke Vardas pridėkite pageidaujamą programos pavadinimą.
Pagal įgaliotus peradresavimo URI naudokite http://localhost: 3000 ir http://localhost: 3000/auth/google/callback įgaliotiems peradresavimo URI.
Spustelėkite sukurti sukurti OAuth klientą. Kadangi programos kredencialai yra jautrūs, turėsite sukurti a .env failą ir pridėkite prie jo kliento ID bei kliento paslaptį.
CLIENT_ID =CLIENT_SECRET =
2 veiksmas: nustatykite mazgo serverį
Sukurti aplanką, user-google-auth, ir eikite į jį.
mkdir user-google-auth
cd user-google-auth
Inicijuoti npm sukurti package.json.
npm init -y
Kadangi jūs naudosite „Express to sukurti serverį, įdiekite jį vykdydami šią komandą.
npm install express
Atidarykite aplanką naudodami pageidaujamą teksto rengyklę ir sukurkite naują failą app.js. Tai bus jūsų paraiškos įvesties taškas.
Sukurkite NodeJS serverį app.js.
const express = reikalauti("išreikšti");
const programa = express ();
const PORT = 3000;
app.listen (PORT, () => {
console.log(`Klausymas prievade ${PORT}`);
});
2 veiksmas: nustatykite „MongoDB“.
Iš Google gautus naudotojo duomenis saugosite a MongoDB duomenų bazė. Prieš išsaugodami vartotojo informaciją, turite apibrėžti struktūrą, kurioje duomenys bus saugomi. Mangustas tam puikiai tinka. Tai gana paprastas būdas sukurti duomenų modelius.
Diegti mangustas.
npm įdiegti mongoose
Sukurkite naują failą userModel.jsir sukurti vartotojo schemą.
const mongoose = reikalauti("monguzas");
const { Schema } = mangutas.modelis;
const UserSchema = new Schema({
google: {
id: {
tipas: styga,
},
vardas: {
tipas: styga,
},
paštas: {
tipas: styga,
},
},
});
const Vartotojas = mongoose.model("Vartotojas", Vartotojo schema);
module.exports = Vartotojas;
Į userModel.js, importavote mangustą ir sukūrėte naują schemą.
Atkreipkite dėmesį, kad grupuojate informaciją iš „Google“. Tai ypač naudinga, kai taip pat naudojate kitus autentifikavimo metodus, o vartotojas naudoja daugiau nei vieną. Taip lengviau išvengti dvigubos registracijos.
Toliau sukurkite db.js.
const mongoose = reikalauti("monguzas");
mangustas. Pažadas = pasaulinis. Pažadas;
const dbUrl = "mongodb://localhost/user";
const connect = async () => {
mongoose.connect (dbUrl, { useNewUrlParser: true, useUnifiedTopology: true });
const db = mongoose.connection;
db.on("klaida", () => {
console.log("nepavyko prisijungti");
});
db.once("atidaryti", () => {
console.log("> Sėkmingai prisijungta prie duomenų bazės");
});
};
module.exports = { prisijungti };
Prisijunkite prie duomenų bazės app.js.
const express = reikalauti("išreikšti");
const programa = express ();
const PORT = 3000;
const db = reikalauti(./db");
db.connect();
app.listen (PORT, () => {
console.log(`Klausymas prievade ${PORT}`);
});
3 veiksmas: nustatykite pasą
Diegti pasas ir pass-google-oauth2.
npm ir pasas pasas-google-oauth2
Sukurti naują failą, passConfig.jsir importuoti „Google“ strategiją iš pass-google-oauth2 ir userModel.js.
const GoogleStrategy = reikalauti("passport-google-oauth2").Strategija;
const Vartotojas = reikalauti("./userModel");
Norėdami konfigūruoti, naudokite programos kredencialus pasas su Google OAuth.
module.exports = (pasas) => {
passport.use (new GoogleStrategy({
kliento ID: process.env. CLIENT_ID,
kliento paslaptis: process.env. CLIENT_SECRET,
callbackURL: " http://localhost: 3000/auth/google/callback“,
passReqToCallback: tiesa
},
async (request, accessToken, refreshToken, profile, done) => {
bandyti {
tegul esamasUser = laukti User.findOne({ 'google.id': profile.id });
// jei vartotojas egzistuoja, grąžinkite vartotoją
if (existingUser) {
grąžinimas atliktas (nulis, esamas Vartotojas);
}
// jei vartotojo nėra, sukurkite naują vartotoją
console.log('Kuriamas naujas vartotojas...');
const newUser = naujas vartotojas({
metodas: „google“,
google: {
ID: profile.id,
vardas: profile.displayName,
paštas: profile.emails[0].value
}
});
laukti newUser.save();
grąžinimas atliktas (null, newUser);
} sugauti (klaida) {
grąžinimas atliktas (klaida, klaidinga)
}
}
));
}
Kai gausite profilio informaciją iš „Google“, patikrinkite, ar vartotojas yra duomenų bazėje. Jei taip, tiesiog grąžinkite rastą vartotoją. Jei vartotojas yra naujas, sukurkite naują dokumentą duomenų bazėje ir grąžinkite sukurtą vartotoją.
Atkreipkite dėmesį, kad dirbate su env kintamieji, todėl naudokite npm paketą dotenv norėdami juos pasiekti savo programoje.
Diegti dotenv.
npm įdiegti dotenv
Naudokite dotenv in app.js.
Reikalauti("dotenv").config()
Į app.js, praeiti pasas į passConfig.js
const pasas = reikalauti("pasas");
reikalauti(./passportConfig")(pasas);
4 veiksmas: sukurkite autentifikavimo maršrutus
Jums reikia trijų maršrutų:
- Peradresuokite vartotoją į „Google“ prisijungimo puslapį, kad gautumėte prieigos raktą.
- Gaukite vartotojo duomenis naudodami gautą prieigos raktą.
- Po to nukreipkite vartotoją į profilio puslapį sėkmingas autentifikavimas.
// Peradresuokite vartotoją į „Google“ prisijungimo puslapį
app.get(
"/auth/google",
passport.authenticate("google", { apimtis: ["el. paštas", "profilis"] })
);
// Gauti vartotojo duomenis naudodami gautą prieigos raktą
app.get(
"/auth/google/callback",
passport.authenticate("google", { session: false }),
(req, res) => {
res.redirect("/profile/");
}
);
// profilio maršrutas sėkmingai prisijungus
app.get("/profile", (req, res) => {
console.log (req);
res.send("Sveiki atvykę");
});
5 veiksmas: apsaugokite privačius maršrutus
Dabar, kai prisijungėte kaip vartotojas, kaip galite apriboti kai kurias programos dalis tik patvirtintiems vartotojams? Vienas iš būdų tai padaryti yra naudoti JSON žiniatinklio prieigos raktus (JWT). JWT siūlo saugų informacijos perdavimo būdą. Į įgalioti vartotojus naudojant JWT, jūsų programa:
- Sugeneruokite prieigos raktą naudodami vartotojo duomenis.
- Perduokite prieigos raktą vartotojui (vartotojas atsiųs prieigos raktą su užklausomis, kurioms reikia autorizacijos).
- Patvirtinkite išsiųstą žetoną.
- Suteikite vartotojui prieigą, jei pateiktas prieigos raktas galioja.
Diegti jsonwebtoken dirbti su JWT.
npm įdiegti jsonwebtoken
Į app.js, importuoti jsonwebtoken.
const jwt = reikalauti ("jsonwebtoken")
Pakeiskite „Google“ atgalinio skambučio URL, kad pasirašytumėte naudotoją ir sugeneruotumėte prieigos raktą.
app.get(
"/auth/google/callback",
passport.authenticate("google", { session: false }),
(req, res) => {
jwt.sign(
{ user: req.user },
"slaptas raktas",
{ expiresIn: "1h" },
(err, token) => {
if (err) {
return res.json({
žetonas: null,
});
}
res.json({
žetonas,
});
}
);
}
);
Prisijungę gausite žetoną.
Toliau naudokite pasas-jwt, Passport pateikta JWT strategija, skirta patikrinti prieigos raktą ir įgalioti naudotojus.
npm įdiegti pass-jwt
Į passConfig.js, pridėkite JWT strategiją.
const JwtStrategy = reikalauti("pasas-jwt").Strategija;
const { ExtractJwt } = reikalauti("pasas-jwt");
module.exports = (pasas) => {
passport.use (nauja GoogleStrategy(
// Google strategija
);
pass.use(
nauja JwtStrategy(
{
jwtFromRequest: ExtractJwt.fromHeader("autorizacija"),
secretOrKey: "secretKey",
},
async (jwtPayload, atlikta) => {
bandyti {
// Išskleisti vartotoją
const user = jwtPayload.user;
atlikta (nulinis, vartotojas);
} sugauti (klaida) {
padaryta (klaida, klaidinga);
}
}
)
);
}
Čia jūs ištraukiate prieigos raktą iš prieigos teisės antraštės, kurioje jis saugomas, o tai yra daug saugiau nei saugoti jį užklausos turinyje.
Patvirtinus prieigos raktą, vartotojo objektas siunčiamas atgal į užklausos turinį. Norėdami įgalioti vartotojus, pridėkite paso JWT autentifikavimo tarpinę programinę įrangą į apsaugotus maršrutus.
app.get(
"/profilis",
passport.authenticate("jwt", { session: false }),
(req, res, next) => {
res.send("Sveiki atvykę");
}
);
Dabar prieigą gaus tik užklausos, kuriose pateikiamas galiojantis prieigos raktas.
Tolesni žingsniai
Šioje pamokoje buvo parodyta, kaip galite naudoti „Passport“, kad prisijungtumėte prie programos naudotojams naudojant „Google“ paskyrą. „Passport“ naudojimas yra daug paprastesnis nei kitų formų, todėl sutaupysite daug laiko.
„Passport“ taip pat teikia kitas autentifikavimo strategijas, kurias galima naudoti su kitais tapatybės teikėjais, pvz., „Twitter“ ir „Facebook“. Taigi, verta patikrinti ir juos.
Vartotojo autentifikavimas NodeJS naudojant Passport ir MongoDB
Skaitykite toliau
Susijusios temos
- Programavimas
- Saugumas
- Programavimas
- Programavimo įrankiai
- Google Authenticator
Apie autorių
Mary Gathoni yra programinės įrangos kūrėja, kuri aistringai kuria techninį turinį, kuris būtų ne tik informatyvus, bet ir įtraukiantis. Kai ji nekoduoja ir nerašo, jai patinka leisti laiką su draugais ir būti lauke.
Prenumeruokite mūsų naujienlaiškį
Prisijunkite prie mūsų naujienlaiškio, kad gautumėte techninių patarimų, apžvalgų, nemokamų el. knygų ir išskirtinių pasiūlymų!
Spauskite čia norėdami užsiprenumeruoti