טיפול בסשנים באמצעות Firestore

באפליקציות רבות נדרש ניהול סשנים לצורך אימות והעדפות משתמש. ‫Node.js Express framework כולל הטמעה מבוססת-זיכרון לביצוע הפונקציה הזו. עם זאת, ההטמעה הזו לא מתאימה לאפליקציה שאפשר להציג ממספר מופעים, כי יכול להיות שהביקור שתועד במופע אחד יהיה שונה ממופעים אחרים. במדריך הזה מוסבר איך לנהל סשנים ב-App Engine.

מטרות

  • כותבים את האפליקציה.
  • מריצים את האפליקציה באופן מקומי.
  • פורסים את האפליקציה ב-App Engine.

עלויות

במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:

כדי להעריך את ההוצאות בהתאם לתחזית השימוש שלכם, אתם יכולים להיעזר במחשבון העלויות.

משתמשים חדשים של Google Cloud ? יכול להיות שאתם זכאים לתקופת ניסיון בחינם.

כשמסיימים את המשימות שמתוארות במסמך הזה אפשר למחוק את המשאבים שיצרתם כדי להימנע מחיובים נוספים. מידע נוסף זמין בקטע הסרת המשאבים.

לפני שמתחילים

  1. נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Firestore API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  5. התקינו את ה-CLI של Google Cloud.

  6. אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

  7. כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:

    gcloud init
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the Firestore API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  11. התקינו את ה-CLI של Google Cloud.

  12. אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

  13. כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:

    gcloud init

הגדרת הפרויקט

  1. בחלון המסוף, מתחילים בספרייה לפי בחירתכם ויוצרים ספרייה חדשה בשם sessions. כל הקוד של המדריך הזה נמצא בספרייה sessions.

  2. עוברים לספרייה sessions:

    cd sessions
    
  3. מאתחלים את הקובץ package.json:

    npm init .
    
  4. מתקינים את יחסי התלות:

    npm install \
     --save @google-cloud/connect-firestore @google-cloud/firestore express express-session
    

בסוף המדריך הזה, מבנה הקבצים הסופי יהיה דומה לזה:

sessions
├── app.yaml
├── index.js
└── package.json

כתיבת אפליקציית האינטרנט

האפליקציה הזו מציגה ברכות בשפות שונות לכל משתמש. המשתמשים החוזרים תמיד יקבלו את פנייה באותה שפה.

כמה חלונות של אפליקציות שמוצגת בהם ברכה בשפות שונות.

כדי שהאפליקציה תוכל לאחסן העדפות של משתמש, צריך לאחסן מידע על המשתמש הנוכחי בסשן. אפליקציית הדוגמה הזו משתמשת ב-Firestore לאחסון נתוני סשנים.

אפשר להשתמש ב-connect-firestore, מאגר סשנים שתואם ל-express-session.

  • בחלון הטרמינל, יוצרים קובץ בשם index.js עם התוכן הבא:

    // Copyright 2019, Google LLC.
    // Licensed under the Apache License, Version 2.0 (the "License");
    // you may not use this file except in compliance with the License.
    // You may obtain a copy of the License at
    //
    //    http://www.apache.org/licenses/LICENSE-2.0
    //
    // Unless required by applicable law or agreed to in writing, software
    // distributed under the License is distributed on an "AS IS" BASIS,
    // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    // See the License for the specific language governing permissions and
    // limitations under the License.
    
    const {Firestore} = require('@google-cloud/firestore');
    const express = require('express');
    const session = require('express-session');
    
    const app = express();
    const {FirestoreStore} = require('@google-cloud/connect-firestore');
    
    app.use(
      session({
        store: new FirestoreStore({
          dataset: new Firestore(),
          kind: 'express-sessions',
        }),
        secret: 'my-secret',
        resave: false,
        saveUninitialized: true,
      })
    );
    
    const greetings = [
      'Hello World',
      'Hallo Welt',
      'Ciao Mondo',
      'Salut le Monde',
      'Hola Mundo',
    ];
    
    app.get('/', (req, res) => {
      if (!req.session.views) {
        req.session.views = 0;
        req.session.greeting =
          greetings[Math.floor(Math.random() * greetings.length)];
      }
      const views = req.session.views++;
      res.send(`${views} views for ${req.session.greeting}`);
    });
    
    const port = process.env.PORT || 8080;
    app.listen(port, () => {
      console.log(`Example app listening on port ${port}!`);
    });
    
    module.exports = app;
    

הדיאגרמה הבאה ממחישה איך Firestore מטפל בסשנים באפליקציית App Engine.

תרשים ארכיטקטורה: משתמש, App Engine, ‏ Firestore.

אחרי שמגדירים את app.use(session), לכל בקשה יש מאפיין req.session שאפשר להשתמש בו כדי לזהות משתמשים חוזרים. נתוני הסשן מאוחסנים ב-Firestore.

מחיקת סשנים

Connect-firestore לא מוחק סשנים ישנים או כאלה שתוקפם פג. אתם יכולים למחוק נתוני סשן במסוףGoogle Cloud או להטמיע אסטרטגיה למחיקה אוטומטית. אם אתם משתמשים בפתרונות אחסון לסשנים כמו Memcache או Redis, סשנים שתוקפם פג נמחקים אוטומטית.

הרצה מקומית

  1. בחלון הטרמינל, מתקינים את יחסי התלות של הפרויקט Google Cloud :

    npm install
    
  2. מפעילים את שרת ה-HTTP:

    npm start
    
  3. צפייה באפליקציה בדפדפן אינטרנט:

    Cloud Shell

    בסרגל הכלים של Cloud Shell, לוחצים על Web preview (תצוגה מקדימה של אתר) תצוגה מקדימה של אתר ובוחרים באפשרות Preview on port 8080 (תצוגה מקדימה ביציאה 8080).

    מכונה מקומית

    בדפדפן, עוברים אל http://localhost:8080

    מוצגת אחת מ-5 ברכות: Hello World,‏ Hallo Welt,‏ Hola mundo,‏ Salut le Monde או Ciao Mondo. השפה משתנה אם פותחים את הדף בדפדפן אחר או במצב פרטי. אפשר לראות ולערוך את נתוני הסשן בGoogle Cloud מסוף.

    פעילויות ב-Firestore במסוף Google Cloud .

  4. כדי לעצור את שרת ה-HTTP, בחלון הטרמינל לוחצים על Control+C.

פריסה והרצה ב-App Engine

אתם יכולים להשתמש בסביבה רגילה של App Engine כדי ליצור ולפרוס אפליקציה שפועלת בצורה מהימנה בעומס כבד ועם כמויות גדולות של נתונים.

במדריך הזה משתמשים בסביבה הרגילה של App Engine כדי לפרוס את השרת.

  1. בחלון הטרמינל, יוצרים קובץ app.yaml ומעתיקים את הטקסט הבא:

    runtime: nodejs10
  2. פורסים את האפליקציה ב-App Engine:

    gcloud app deploy
    
  3. כדי לראות את האפליקציה הפעילה, מזינים את כתובת ה-URL הבאה:

    https://PROJECT_ID.REGION_ID.r.appspot.com

    מחליפים את מה שכתוב בשדות הבאים:

ההודעה מועברת עכשיו על ידי שרת אינטרנט שפועל במופע של App Engine.

ניפוי באגים באפליקציה

אם אתם לא מצליחים להתחבר לאפליקציית App Engine, כדאי לבדוק את הדברים הבאים:

  1. בודקים שהפקודות gcloud deploy הושלמו בהצלחה ולא הוחזרו שגיאות. אם היו שגיאות (לדוגמה, message=Build failed), צריך לתקן אותן ולנסות שוב לפרוס את אפליקציית App Engine.
  2. נכנסים לדף Logs Explorer במסוף Google Cloud .

    כניסה לדף Logs Explorer

    1. בתפריט הנפתח Recently selected resources (משאבים שנבחרו לאחרונה), לוחצים על App Engine Application (אפליקציית App Engine) ואז על All module_id (כל מזהי המודולים). מוצגת רשימה של בקשות מהביקור שלכם באפליקציה. אם לא מוצגת רשימה של בקשות, צריך לוודא שבחרתם באפשרות All module_id מהרשימה הנפתחת. אם הודעות השגיאה מודפסות ב Google Cloud מסוף, צריך לוודא שהקוד של האפליקציה זהה לקוד שבקטע על כתיבת אפליקציית האינטרנט.

    2. מוודאים ש-Firestore API מופעל.

הסרת המשאבים

מחיקת הפרויקט

  1. במסוף Google Cloud , נכנסים לדף Manage resources.

    כניסה לדף Manage resources

  2. ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
  3. כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.

מחיקת מכונת App Engine

  1. במסוף Google Cloud , נכנסים לדף Versions של App Engine.

    כניסה לדף Versions

  2. מסמנים את התיבה שלצד גרסת האפליקציה שלא מוגדרת כברירת מחדל ושרוצים למחוק.
  3. כדי למחוק את גרסת האפליקציה, לוחצים על Delete.

המאמרים הבאים