برنامه نویسی

نحوه افزودن احراز هویت 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

توضیحات تصویر

این همه، سخت نیست، می توانید کد منبع من را اینجا بررسی کنید.

کلمات اخر

اگرچه محتوای من برای همه رایگان است، اما اگر این مقاله برای شما مفید است، می توانید یک قهوه برای من از اینجا بخرید

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا