Fejlesztőként az Ön felelőssége a felhasználók adatainak hitelesítéssel történő védelme. A Passport.js segítségével hitelesítheti a felhasználókat a Node és a Postgres alkalmazásokban.
Kezdje egy csomópont-kiszolgáló létrehozásával végpontokkal a felhasználók regisztrálásához, bejelentkezéséhez és kijelentkezéséhez. Engedheti, hogy a Passport kezelje a hitelesítést, hogy korlátozza az alkalmazáshoz való jogosulatlan hozzáférést.
Felhasználói tábla létrehozása
A felhasználói hitelesítéshez egy e-mailt és egy jelszót fog használni. Ez azt jelenti, hogy a felhasználók táblájának tartalmaznia kell egy e-mail-címet és egy jelszómezőt. A psql parancssorban hozzon létre egy új adatbázist nodeapp néven:
TEREMTADATBÁZIS nodeapp;
Ezután hozzon létre egy táblázatot a felhasználók tárolására:
TEREMTASZTALfelhasználókat (
azonosító INT MINDIG ELSŐDLEGES AZONOSÍTÁSI KULCSKÉNT LÉTREHOZOTT,
e-mail CHAR(128),
jelszó CHAR(60)
);
Ez a kód egy új táblázatot hoz létre, amely e-mail címet, jelszót és egy automatikusan generált azonosító mezőt tartalmaz.
Csomópont-kiszolgáló létrehozása
A Node.js egy szerveroldali JavaScript futási környezet, amely lehetővé teszi a HTTP-kiszolgálók gyors létrehozását. A kiszolgáló és a különböző HTTP-útvonalak létrehozásának egyszerűsítésére használhatja Express, egy Node.js webes keretrendszer.
Futtassa ezt a parancsot egy új postgres-auth nevű mappa létrehozásához:
mkdir postgres-auth
Ezután inicializálja az npm-et:
npm init -y
Végül telepítse az Expresst:
npm install express
Most tudsz hozza létre a Node webszervert.
Egy új fájlban, melynek neve index.js, adja hozzá a következőket:
const expressz = igényelnek("Expressz");
const app = express();
app.use (express.json());
app.use (express.urlencoded({ kiterjedt: igaz }));
app.listen(3000, () => konzol.log("Hangolás a porton 3000"));
A kód futtatása elindítja a szervert, és a következőket naplózza a konzolon:
Hallgatás a 3000-es porton
Csatlakozás a PostgreSQL-hez
Nak nek csatlakozni a PostgreSQL-hez használat csomópont-postgres. A node-postgres egy kapcsolati illesztőprogram, amely interfészt biztosít a Node és a Postgres között.
Hajtsa végre a következőket a node-postrges npm-en keresztüli telepítéséhez:
npm telepítés pg
Miután telepítette a könyvtárat, hozzon létre egy új fájlt db.js és csatlakoztassa az adatbázishoz:
const { Ügyfél } = igényelnek("pg");
const { felhasználó, gazdagép, adatbázis, jelszó, port } = igényelnek(./dbConfig");const ügyfél = új Ügyfél({
felhasználó,
házigazda,
adatbázis,
Jelszó,
kikötő,
});
client.connect();
modult.exports = ügyfél;
A node-postgres kliens metódusa veszi annak az adatbázisnak a részleteit, amelyhez csatlakozik. Ez a program importálja a kapcsolat részleteit egy nevű fájlból dbConfig. Ezért hozza létre azt a fájlt, és adja hozzá a következő kódot:
modult.exports = {
felhasználó: "postgres",
host: "localhost",
adatbázis: "nodeapp",
jelszó: "YourPassword",
kikötő: 5432,
};
Adatbázis-segítő funkciók létrehozása
Mindig jó gyakorlat az egyes függvények használata az adatbázissal való interakcióhoz. Ezek megkönnyítik az egységtesztek írását, és javítják az újrafelhasználhatóságot. A regisztrációs végponthoz két függvényt kell létrehoznia:
- Annak ellenőrzésére, hogy az e-mail már regisztrálva van-e.
- A felhasználó létrehozásához.
A cél az, hogy csak akkor regisztráljanak egy felhasználót, ha az nem létezik az adatbázisban.
Hozzon létre egy új fájlt helper.js és importálja az adatbázis-ügyfelet a db.js-ből:
const ügyfél = igényelnek("./db.js")
Ezután adjon hozzá egy új emailExists() nevű függvényt:
const emailExists = async (e-mail) => {
const adatok = várják client.query("SELECT * FROM felhasználók WHERE email=$1", [
email,
]);
ha (data.rowCount == 0) Visszatéréshamis;
Visszatérés data.rows[0];
};
Ez a funkció fogad egy e-mailt, és ellenőrzi, hogy használatban van-e már. Ezt a SELECT záradék használatával teszi meg, amely egy sort ad vissza, amelynek e-mail mezője megegyezik a regisztráló felhasználó által megadott értékkel. Ha az e-mail nem létezik, false értéket ad vissza.
A felhasználót létrehozó függvény létrehozásához adjon hozzá egy createUser() nevű függvényt a helper.js fájlhoz:
const createUser = async (e-mail, jelszó) => {
const só = várják bcrypt.genSalt(10);
const hash = várják bcrypt.hash (jelszó, só);const adatok = várják client.query(
"INSERT INTO felhasználók (e-mail, jelszó) ÉRTÉKEK ($1, $2) AZ azonosító, e-mail, jelszó VISSZATÉRÉSE",
[e-mail, hash]
);
ha (data.rowCount == 0) Visszatéréshamis;
Visszatérés data.rows[0];
};
Ez a funkció az e-mail és a jelszó értékeket veszi fel. Az INSERT záradék segítségével új sort hoz létre ezekkel az adatokkal, és ha sikeres, visszaadja az újonnan létrehozott felhasználót. Vegye figyelembe, hogy a jelszó tárolása előtt meg kell tennie kivonatolja a bcrypt segítségével. Soha nem jó ötlet a jelszavakat egyszerű szövegként tárolni. Ha a hackerek hozzáfértek a felhasználói adatbázishoz, könnyen hozzáférhetnek a bizalmas információkhoz.
A használat megkezdéséhez telepítse a bcryptjs-t:
npm telepítse a bcryptjs-t
A helper.js-ben importálja a bcryptjs-t:
const bcrypt = igényelnek("bcryptjs")
A Bcryptjs használatával az adatbázis csak a titkosított jelszót tárolja. Ezért a bejelentkezés során össze kell hasonlítania a felhasználó által megadott egyszerű szöveges jelszót és az adatbázisban lévő kivonatolt jelszót. Ehhez használhatja a Bcryptjs által biztosított összehasonlítási módszert.
Hozzon létre egy matchPassword() nevű függvényt:
const matchPassword = async (jelszó, hashPassword) => {
const egyezés = várják bcrypt.compare (jelszó, hashPassword);
Visszatérés mérkőzés
};
Megkapja az egyszerű jelszót és a hash-t, majd a Bcrypt.compare() segítségével határozza meg, hogy a megadott jelszó helyes-e. Ha igen, akkor igazat ad vissza, ellenkező esetben hamis értéket ad vissza.
Ezeket a funkciókat fogjuk használni az adatbázissal való interakcióhoz. Ügyeljen arra, hogy a végén mindegyiket exportálja:
modult.exports = { emailExists, createUser, matchPassword };
A Passport konfigurálása
A Passport egy csomóponti hitelesítési köztes szoftver, amely több mint 500 hitelesítési stratégiát biztosít, mint például a közösségi bejelentkezés, a JSON Web Tokens (JWT) és az e-mail hitelesítés. Ez utóbbit fogjuk használni, amit az útlevél-helyi stratégia biztosít.
A passport és passport-local telepítéséhez használja a következő parancsot:
npm útlevél telepítése
npm install passport-local
Ezután állítsa be a Passportot a meglévő felhasználók bejelentkezéséhez és új felhasználók regisztrálásához.
Kezdje egy új fájl létrehozásával passportConfig.js. Ezután importálja a Passport helyi stratégiát és az imént létrehozott adatbázis-segédfunkciókat:
const LocalStrategy = igényelnek("útlevél-helyi");
const { emailExists, createUser, matchPassword } = igényelnek("./segítő");
Ugyanabban a fájlban adja hozzá a következőket a felhasználói regisztráció beállításához:
modult.exports = (útlevél) => {
passport.use(
"helyi regisztráció",
új LocalStrategy(
{
felhasználónévMező: "e-mail",
jelszóMező: "jelszó",
},
async (e-mail, jelszó, kész) => {
próbálja meg {
const userExists = várják e-mail létezik (e-mail)ha (felhasználó létezik) {
Visszatérés Kész(nulla, hamis);
}
const felhasználó = várják createUser (e-mail, jelszó);
Visszatérés Kész(nulla, felhasználó);
} fogás (hiba) {
kész (hiba);
}
}
)
);
}
Mivel a passport-local felhasználónevet és jelszót vár, Ön pedig e-mailt használ, állítsa be a felhasználónév mezőt e-mailre. A felhasználó, vagy inkább az alkalmazás frontend része elküldi az e-mailt és a jelszót a kérés törzsében. Az értékeket azonban nem kell magának kinyernie, mivel a Passport kezeli ezt a háttérben.
Ez a program először ellenőrzi, hogy az e-mail már foglalt-e a helper.js emailExists() függvényével. Ha az e-mail nem létezik az adatbázisban, akkor a createUser() függvénnyel új felhasználót hoz létre. Végül visszaadja a felhasználói objektumot.
A felhasználók bejelentkezéséhez adja hozzá a következőket a passportConfig.js fájlhoz:
modult.exports = (útlevél) => {
passport.use(
"helyi regisztráció",
új LocalStrategy(
// regisztrálj
)
);
passport.use(
"helyi bejelentkezés",
új LocalStrategy(
{
felhasználónévMező: "e-mail",
jelszóMező: "jelszó",
},
async (e-mail, jelszó, kész) => {
próbálja meg {
const felhasználó = várják emailExists (e-mail);
ha (!felhasználó) Visszatérés Kész(nulla, hamis);
const isMatch = várják matchPassword (jelszó, user.password);
ha (!isMatch) Visszatérés Kész(nulla, hamis);
Visszatérés Kész(nulla, {id: Felhasználói azonosító, email: user.email});
} fogás (hiba) {
Visszatérés kész (hiba, hamis);
}
}
)
);
};
Itt a program először ellenőrzi, hogy az e-mail regisztrálva van-e. Ha nem, akkor hamis értéket ad vissza. Ha megtalálja az e-mailt, összehasonlítja a jelszavát a kérésben szereplővel. Ha a jelszavak megegyeznek, bejelentkezik a felhasználóba, és visszaadja a felhasználói objektumot.
Az utolsó lépés az API-végpontok létrehozása:
- POST /auth/signup
- POST /auth/login
Mindkét végpont kap egy e-mailt és egy jelszót a kérelem törzsében. Tartalmazni fogják az általunk most konfigurált útlevél-hitelesítési köztes szoftver funkciókat is.
Importálja és állítsa be a Passportot egy új nevű fájlban server.js:
const útlevél = igényelnek("útlevél");
igényelnek(./passportConfig")(útlevél);
Ezután adja hozzá a következő útvonalakat:
app.post(
"/auth/regisztrálj",
passport.authenticate("local-signup", { ülés: hamis }),
(req, res, next) => {
res.json({
felhasználó: req.user,
});
}
);
app.post(
"/auth/Belépés",
passport.authenticate("local-login", { ülés: hamis }),
(req, res, next) => {
res.json({ felhasználó: req.user });
}
);
Mindkét útvonal a felhasználót tartalmazó JSON-objektumot ad vissza, ha sikeres.
Ellenőrizze az API-ját egységtesztekkel
A Passport segítségével PostgreSQL-alkalmazással hitelesítheti a Node-alkalmazásokat. API-végpontokat hozott létre a felhasználók regisztrációjához és bejelentkezéséhez.
Míg a REST-klienseket, például a Postmant használhatja az API működésének tesztelésére, az egységtesztek írása sokkal egyszerűbb. Az egységtesztek lehetővé teszik az alkalmazás egyes részeinek tesztelését. Így még akkor is, ha egy végpont meghibásodik, pontosan meghatározhatja a hibapontot. A Node alkalmazások tesztelésére használható egyik eszköz a Jest.