جافاسكريبت - المصادقة الاختيارية في Nest.js باستخدام @nestjs/passport


لدي مسار يحتاج إلى أن يتم استخدامه من قبل المستخدمين المصادق عليهم وغير المصادق عليهم. أستخدم @UseGuards(AuthGuard('jwt')) لتمكين المصادقة ولكنه يمنع أي مستخدم غير مصادق عليه من الوصول إلى المسار (وهو أمر طبيعي).

كيف يمكنني السماح للمستخدمين غير المصادق عليهم أيضًا بالوصول إلى المسار؟

يبدو أنه لا توجد خيارات يمكنني تمريرها إلى AuthGuard لاستردادها في استراتيجية جواز السفر الخاصة بي.

الإجابة رقم 1

يمكنك ببساطة إنشاء AuthGuard خاص بك على سبيل المثال عن طريق توسيع الموجود بالفعل:

export class OptionalJwtAuthGuard extends AuthGuard('jwt') {

  // Override handleRequest so it never throws an error
  handleRequest(err, user, info, context) {
    return user;
  }

}

ثم استخدم هذا على وحدات التحكم الخاصة بك بدلاً من ذلك:

@UseGuards(OptionalJwtAuthGuard)