نحوه افزودن احراز هویت JWT به برنامه های NestJS

مقدمه
احراز هویت بخش مهمی از برنامه های ما است. گهگاه راههای زیادی برای انجام احراز هویت وجود دارد. با هر نیاز، ما رویکرد مناسبی برای رسیدگی به احراز هویت پیدا می کنیم.
-
این مقاله یک آموزش ساده در مورد نحوه اجرای احراز هویت با NestJS است، قبل از رفتن به راهنما، قصد دارم فناوری هایی را که قرار است در راهنما استفاده شوند، نشان دهم.
-
JWT یا JSON Web Token یک استاندارد صنعتی است RFC 7519 روشی برای ارائه مطالبات امن بین دو طرف
Passport محبوب ترین کتابخانه احراز هویت Node است که توسط جامعه شناخته شده است و با موفقیت در بسیاری از برنامه های تولیدی استفاده می شود. NestJS آن را در خارج از جعبه با پشتیبانی می کند@nestjs/passport
نصب و راه اندازی
ابتدا پروژه را ایجاد می کنیم
nest new your-project-name
سپس وابستگی ها را اضافه می کنیم
yarn add @nestjs/passport passport passport-local passport-jwt @nestjs/jwt
قرار است استفاده کنیم mongoose
برای ذخیره داده ها
yarn add mongoose @nestjs/mongoose
ماژول ها، خدمات و کنترلرها را تولید کنید
برای احراز هویت به 2 ماژول نیاز داریم AuthModule
و UserModule
، هر یک از آنها به فایل های کنترل کننده و سرویس نیاز دارند
ماژول احراز هویت:
nest g module auth
nest g service auth
nest g controller auth
ماژول کاربر
nest g module users
nest g service users
nest g controller users
طرحواره و رابط را تعریف کنید
ما به یک نیاز داریم UserSchema
و یک User
رابط، بیایید ایجاد کنیم user.model.ts
فایل
ایجاد سرویس کاربری
ما ایجاد کردیم users.service.ts
قبل، بعد 3 روش برای ثبت نام ایجاد می کنیم (createUser)، دریافت همه کاربران (getUsers) و دریافت یک کاربر (getUser)
یک ماژول کاربر یک کنترلر ایجاد کنید
چیز زیادی برای گفتن در مورد این فایل ها نیست، من 2 مسیر را در آن ایجاد کردم UsersController
برای ثبت نام و دریافت همه کاربران و وارد کردن همه چیزهایی که با کاربران داریم به users.module.ts
فایل
تنها چیزی که باید در نظر داشت این است @UseGuards(AuthGuard('jwt))
part، یعنی ما نمی توانیم بدون ورود به این مسیر و داشتن jwt به این مسیر دسترسی داشته باشیم
سرویس احراز هویت
2 روش در AuthService
یکی این است که اگر کاربر با اعتبار صحیح در پایگاه داده ما وجود دارد، اعتبار سنجی کنیم، دیگری این است که یک access_token
که یک JWT است که با یک username
استراتژی ها
ما باید ایجاد کنیم strategies
، در این راهنما من 2 استراتژی ایجاد خواهم کرد، یکی است LocalStrategy
و دیگری است JwtStrategy
این LocalStrategy
زمانی که ما نیاز به تأیید اعتبار داریم، به یک هدف عمل می کند username
و password
قبل از اینکه وارد کنترلر شوید در این مورد، من داخلی را ایجاد می کنم validation
روش با validateUserCredentials
از AuthService
برای JwtStrategy
را تمدید می کنیم PassportStrategy
از @nestjs/passport
کتابخانه درست مانند بالا، سپس یک شی را برمی گردانیم که شامل username
. سازنده باید JWT را از توکن Header Bearer استخراج کند access_token
). ما همچنین به یک کلید مخفی برای استراتژی JWT نیاز داریم SECRET_KEY
اما من به شما پیشنهاد می کنم که از روش ایمن تری برای ذخیره کلیدها استفاده کنید.
ماژول احراز هویت و کنترلر
مانند UserController
در بالا، ما مسیری را برای احراز هویت تعریف می کنیم، در این کنترلر عبارت است از login
مسیر می بینید که استفاده کردم AuthGuard('local')
از LocalStrategy
در بالا. بنابراین ما فقط پس از موفقیت آمیز بودن اعتبار سنجی وارد سیستم می شویم.
چیز زیادی برای گفتن در مورد auth.module.ts
فایل، ما همه ماژول هایی را که نیاز داریم به آنها اختصاص دهیم وارد می کنیم providers
، controllers
ماژول برنامه
هر پروژه NestJS همراه با app.module.ts
فایلی که تمام ماژول ها را متمرکز می کند
توجه: من از MongoDB Atlas برای ایجاد یک پایگاه داده ابری استفاده کردم، اما شما می توانید تصمیم بگیرید که از چه پایگاه داده استفاده کنید
نتیجه
بیایید API های خود را در Postman امتحان کنیم تا ببینیم آیا کار می کند یا خیر
ابتدا سرور را با:
yarn start:dev
سپس Postman را باز کنید، ما با آن شروع می کنیم login
مسیر
ما می توانیم بازگشت سرور را ببینیم access_token
برای ما، ما این را در هر API محافظت شده، مانند getUsers
از جانب UserController
این همه، سخت نیست، می توانید کد منبع من را اینجا بررسی کنید.
کلمات اخر
اگرچه محتوای من برای همه رایگان است، اما اگر این مقاله برای شما مفید است، می توانید یک قهوه برای من از اینجا بخرید