אם אי פעם השתמשת בחשבון Google שלך כדי להיכנס לאפליקציה, אולי שמת לב כמה זה קל. אתה רק צריך ללחוץ על כפתור אחד ולא צריך להקליד את האימייל או הסיסמה שלך. למרות שזה נראה פשוט, מה שקורה מתחת למכסה המנוע הוא די מורכב. עם זאת, כלים כמו פספורט מקלים על זה.
במדריך זה תלמדו כיצד ליישם אימות של Google ב-Node באמצעות Passport ו-Express.
מה זה דרכון?
דַרכּוֹן (או Passport.js) היא תוכנת אימות Node המספקת יותר מ-500 אסטרטגיות לאימות משתמשים כולל אימות חברתי באמצעות פלטפורמות כמו גוגל וטוויטר.
אתה תשתמש passport-google-oauth2 אסטרטגיה לאימות משתמשים בגוגל.
יצירת מערכת אימות של Google ב-Node
זוהי סקירה כללית של מערכת האימות שתיצור:
- כאשר משתמש לוחץ על כפתור ההתחברות, הוא יישלח לדף הכניסה של גוגל שבו הוא ייכנס.
- Google תפנה את המשתמש לאפליקציה שלך עם אסימון גישה. אסימון הגישה נותן לך הרשאה לגשת לפרטי הפרופיל של אותו משתמש.
- שלח את אסימון הגישה ל-Google כדי לקבל את נתוני הפרופיל.
- צור משתמש חדש או אחזר את המשתמש הקיים ממסד הנתונים.
- השתמש ב-JWTs כדי להגן על מסלולים רגישים.
כיצד להגדיר אימות של Google ב-NodeJS באמצעות דרכון
בצע את השלבים הבאים כדי לאשר משתמשים עם Google OAuth,
שלב 1: צור מזהה לקוח של Google וסוד לקוח
לפני השימוש ב-Google כדי להיכנס משתמשים לאפליקציה שלך, עליך לרשום את האפליקציה שלך ב-Google כדי לקבל את מזהה הלקוח וסוד הלקוח לשימוש בעת הגדרת Passport.
היכנס ל- קונסולת Google Cloud ובצע את השלבים הבאים כדי לרשום את האפליקציה שלך.
צור פרויקט חדש. בשורת התפריטים, בחר אישורים וברשימה הנפתחת, בחר מזהה לקוח OAuth.
עבור סוג היישום, בחר אפליקציית רשת. הוסף את השם המועדף עבור היישום שלך בשדה שם.
תחת URI מורשים להפניה מחדש, השתמש http://localhost: 3000 ו http://localhost: 3000/auth/google/callback עבור URI מורשים להפניה מחדש.
נְקִישָׁה לִיצוֹר כדי ליצור את לקוח OAuth. מכיוון שהאישורים של האפליקציה רגישים, תצטרך ליצור א .env קובץ והוסף לו את מזהה הלקוח וסוד הלקוח.
CLIENT_ID =CLIENT_SECRET =
שלב 2: הגדר שרת צומת
צור תיקיה, user-google-auth, ולנווט אליו.
mkdir user-google-auth
cd user-google-auth
לְאַתחֵל npm ליצור package.json.
npm init -y
מכיוון שתשתמש ב- express to ליצור את השרת, התקן אותו על ידי הפעלת הפקודה הבאה.
npm להתקין אקספרס
פתח את התיקיה עם עורך הטקסט המועדף עליך וצור קובץ חדש app.js. זה ישמש כנקודת הכניסה של הבקשה שלך.
צור את שרת NodeJS ב app.js.
const express = require("express");
const app = express();
const PORT = 3000;
app.listen (PORT, () => {
console.log(`האזנה ביציאה ${PORT}`);
});
שלב 2: הגדר MongoDB
אתה תשמור את נתוני המשתמש שהתקבלו מגוגל ב-a מסד נתונים MongoDB. לפני שמירת פרטי המשתמש, עליך להגדיר את המבנה בו יאוחסנו הנתונים. נמייה מושלמת בשביל זה. זה מספק דרך די פשוטה ליצור מודלים של נתונים.
להתקין נְמִיָה.
npm להתקין נמייה
צור קובץ חדש userModel.js, וצור את סכימת המשתמש.
const נמייה = require("נמייה");
const { Schema } = mongoose.model;
const UserSchema = new Schema({
גוגל: {
מזהה: {
סוג: מחרוזת,
},
שם: {
סוג: מחרוזת,
},
אימייל: {
סוג: מחרוזת,
},
},
});
const User = mongoose.model("User", UserSchema);
module.exports = משתמש;
ב userModel.js, ייבאת נמייה ויצרת סכימה חדשה.
שים לב שאתה מקבץ את המידע מגוגל. זה שימושי במיוחד כאשר אתה משתמש גם בשיטות אימות אחרות ומשתמש משתמש ביותר מאחת. זה מקל על מניעת רישום כפול.
לאחר מכן, צור db.js.
const נמייה = require("נמייה");
נְמִיָה. הבטחה = גלובלית. הַבטָחָה;
const dbUrl = "mongodb://localhost/user";
const connect = אסינכרון () => {
mongoose.connect (dbUrl, { useNewUrlParser: true, useUnifiedTopology: true });
const db = mongoose.connection;
db.on("error", () => {
console.log("לא יכול להתחבר");
});
db.once("open", () => {
console.log("> התחבר בהצלחה למסד הנתונים");
});
};
module.exports = { connect };
התחבר למסד הנתונים ב app.js.
const express = require("express");
const app = express();
const PORT = 3000;
const db = require("./db");
db.connect();
app.listen (PORT, () => {
console.log(`האזנה ביציאה ${PORT}`);
});
שלב 3: הגדר דרכון
להתקין דַרכּוֹן ו passport-google-oauth2.
npm i passport passport-google-oauth2
צור קובץ חדש, passportConfig.js, וייבא את האסטרטגיה של Google מ passport-google-oauth2 ו userModel.js.
const GoogleStrategy = require("passport-google-oauth2"). אסטרטגיה;
const User = require("./userModel");
השתמש באישורי האפליקציה שלך כדי להגדיר דַרכּוֹן עם Google OAuth.
module.exports = (דרכון) => {
passport.use (Google אסטרטגיה חדשה({
מזהה לקוח: process.env. CLIENT_ID,
clientSecret: process.env. CLIENT_SECRET,
callbackURL: " http://localhost: 3000/auth/google/callback",
passReqToCallback: נכון
},
אסינכרון (בקשה, accessToken, refreshToken, profile, done) => {
נסה {
let existentUser = await User.findOne({ 'google.id': profile.id });
// אם משתמש קיים החזר את המשתמש
if (existingUser) {
החזרה בוצעה (null, קיים משתמש);
}
// אם המשתמש אינו קיים צור משתמש חדש
console.log('יוצר משתמש חדש...');
const newUser = משתמש חדש({
שיטה: 'google',
גוגל: {
מזהה: profile.id,
שם: profile.displayName,
אימייל: profile.emails[0].value
}
});
await newUser.save();
החזרה בוצעה (null, newUser);
} תפוס (שגיאה) {
החזר בוצע (שגיאה, שקר)
}
}
));
}
לאחר שתקבלו את פרטי הפרופיל מגוגל, בדקו האם המשתמש קיים במסד הנתונים. אם כן, פשוט החזר את המשתמש שנמצא. אם המשתמש חדש, צור מסמך חדש במסד הנתונים והחזר את המשתמש שנוצר.
שימו לב שאתם עובדים עם env משתנים אז השתמש ב- npm חֲבִילָה dotenv כדי לגשת אליהם באפליקציה שלך.
להתקין dotenv.
npm להתקין dotenv
להשתמש dotenv ב app.js.
require("dotenv").config()
ב app.js,לַעֲבוֹר דַרכּוֹן ל passportConfig.js
const passport = require("passport");
require("./passportConfig")(passport);
שלב 4: צור נתיבי אימות
אתה צריך שלושה מסלולים כדי:
- הפנה את המשתמש לדף הכניסה של Google כדי לקבל את אסימון הגישה.
- אחזר נתוני משתמש באמצעות אסימון הגישה שהתקבל.
- הפנה את המשתמש לדף הפרופיל לאחר מכן אימות מוצלח.
// הפנה את המשתמש לדף הכניסה של Google
app.get(
"/auth/google",
passport.authenticate("google", { scope: ["email", "profile"] })
);
// אחזר נתוני משתמש באמצעות אסימון הגישה שהתקבל
app.get(
"/auth/google/callback",
passport.authenticate("google", { session: false }),
(req, res) => {
res.redirect("/profile/");
}
);
// מסלול פרופיל לאחר כניסה מוצלחת
app.get("/profile", (req, res) => {
console.log (req);
res.send("ברוך הבא");
});
שלב 5: הגן על מסלולים פרטיים
כעת, לאחר שנכנסת כמשתמש, כיצד תוכל להגביל חלקים מסוימים של היישום שלך למשתמשים מאומתים בלבד? אחת הדרכים לעשות זאת היא שימוש ב-JSON Web Tokens (JWTs). JWTs מציעים דרך מאובטחת להעברת המידע. ל לאשר משתמשים באמצעות JWTs, האפליקציה שלך:
- צור אסימון באמצעות נתוני המשתמש.
- העבירו את האסימון למשתמש (המשתמש ישלח בחזרה את האסימון עם בקשות שצריכות הרשאה).
- אמת את האסימון שנשלח בחזרה.
- הענק גישה למשתמש אם האסימון שהוצג תקף.
להתקין jsonwebtoken לעבוד עם JWTs.
npm להתקין את jsonwebtoken
ב app.js, ייבוא jsonwebtoken.
const jwt = require("jsonwebtoken")
שנה את כתובת האתר להתקשרות חוזרת של Google כדי לחתום את המשתמש וליצור אסימון.
app.get(
"/auth/google/callback",
passport.authenticate("google", { session: false }),
(req, res) => {
jwt.sign(
{ user: req.user },
"מפתח סודי",
{ expiresIn: "1h" },
(שגיאה, אסימון) => {
אם (שגיאה) {
החזר res.json({
אסימון: null,
});
}
res.json({
אֲסִימוֹן,
});
}
);
}
);
אם תיכנס, תקבל את האסימון.
לאחר מכן, השתמש passport-jwt, אסטרטגיית JWT שסופקה על ידי Passport כדי לאמת את האסימון ולהעניק אישור למשתמשים.
npm להתקין passport-jwt
ב passportConfig.js, הוסף את אסטרטגיית JWT.
const JwtStrategy = require("passport-jwt"). אסטרטגיה;
const { ExtractJwt } = require("passport-jwt");
module.exports = (דרכון) => {
passport.use (GoogleStrategy חדשה(
// אסטרטגיית גוגל
);
passport.use(
חדש JwtStrategy(
{
jwtFromRequest: ExtractJwt.fromHeader("הרשאה"),
secretOrKey: "SecretKey",
},
אסינכרון (jwtPayload, בוצע) => {
נסה {
// חלץ משתמש
const user = jwtPayload.user;
בוצע (null, משתמש);
} תפוס (שגיאה) {
נעשה (שגיאה, שקר);
}
}
)
);
}
כאן, אתה מחלץ את האסימון מכותרת ההרשאה שבה הוא מאוחסן - וזה הרבה יותר בטוח מאשר אחסונו בגוף הבקשה.
לאחר אימות האסימון, אובייקט המשתמש נשלח בחזרה לגוף הבקשה. כדי לאשר משתמשים, הוסף את תוכנת התווך לאימות הדרכון JWT למסלולים מוגנים.
app.get(
"/פּרוֹפִיל",
passport.authenticate("jwt", { session: false }),
(req, res, next) => {
res.send("ברוך הבא");
}
);
כעת, רק בקשות המספקות אסימון חוקי יקבלו גישה.
הצעדים הבאים
מדריך זה הראה לך כיצד אתה יכול להשתמש ב- Passport כדי להיכנס למשתמשים לאפליקציה שלך באמצעות חשבון Google שלהם. השימוש ב- Passport הוא הרבה יותר פשוט מטפסים אחרים, ותחסוך הרבה זמן באמצעות השימוש בו.
Passport מספק גם אסטרטגיות אימות אחרות לשימוש עם ספקי זהות אחרים, כמו טוויטר ופייסבוק. אז כדאי לבדוק גם אותם.
אימות משתמש ב-NodeJS באמצעות Passport ו- MongoDB
קרא הבא
נושאים קשורים
- תִכנוּת
- בִּטָחוֹן
- תִכנוּת
- כלי תכנות
- גוגל
- Google Authenticator
על הסופר
מרי גאתוני היא מפתחת תוכנה עם תשוקה ליצור תוכן טכני שהוא לא רק אינפורמטיבי אלא גם מרתק. כשהיא לא מקודדת או כותבת, היא נהנית לבלות עם חברים ולהיות בחוץ.
הירשם לניוזלטר שלנו
הצטרף לניוזלטר שלנו לקבלת טיפים טכניים, ביקורות, ספרים אלקטרוניים בחינם ומבצעים בלעדיים!
לחץ כאן כדי להירשם