Einführung
Dieser Artikel bietet eine umfassende Schritt-für-Schritt-Anleitung zur Implementierung von Authentifizierung und Autorisierung in einer NestJS-Backend-Anwendung mit Clerk.
Was ist Sachbearbeiter?
Clerk ist eine umfassende Plattform, die einbettbare Benutzeroberflächen, flexible APIs und ein intuitives und robustes Dashboard für eine nahtlose Benutzerauthentifizierung und -verwaltung bietet. Es deckt alles ab, von Sitzungsverwaltung und Multi-Faktor-Authentifizierung bis hin zu Social Sign-Ons, Magic Links, E-Mail- oder SMS-Einmalpasswörtern und mehr.
Warum Clerk verwenden?
Authentifizierungs- und Sicherheitsanforderungen, Trends und Best Practices entwickeln sich ständig weiter, da Datenschutz und Privatsphäre immer wichtiger werden. Indem Sie diese Verantwortung an einen spezialisierten Dienstleister verlagern, können Sie sich auf die Entwicklung der Kernfunktionen Ihrer Anwendung konzentrieren und schneller liefern.
Plattformen wie Clerk übernehmen diese Sicherheitsaufgaben für Sie.
Voraussetzungen
- Grundkenntnisse in Typescript
- Vertrautheit mit den NestJS-Grundlagen
- Verständnis des Authentifizierungskonzepts im Backend
- Läuft Knoten 18 oder höher
Projektaufbau
Für dieses Projekt sind ein neues oder vorhandenes NestJS-Projekt, ein Clerk-Konto und eine Clerk-Anwendung sowie Bibliotheken wie Passport, Passport Strategy und das Clerk-Backend-SDK erforderlich.
Erstellen eines NestJS-Projekts
Mit der Nest-CLI können Sie ganz einfach ein neues NestJS-Projekt einrichten. Führen Sie mit einem beliebigen Paketmanager Ihrer Wahl die folgenden Befehle aus, um eine neue Nest-Anwendung zu erstellen:
$ pnpm add -g @nestjs/cli $ nest new clerk-auth
Weitere Informationen finden Sie in der NestJS-Dokumentation.
Einrichten Ihres Clerk-Kontos und Ihrer Anwendung
Wenn Sie noch keins haben, erstellen Sie ein Clerk-Konto und richten Sie eine neue Anwendung im Clerk-Dashboard ein. Sie können auf der Clerk-Website loslegen.
Erforderliche Bibliotheken installieren
Die erforderlichen Bibliotheken für dieses Projekt können mit diesem Befehl installiert werden:
$ pnpm add @clerk/backend @nestjs/config @nestjs/passport passport passport-custom
Umgebungskonfiguration
Erstellen Sie eine .env-Datei im Stammverzeichnis Ihres Projekts, um Variablen für verschiedene Umgebungen, Produktion, Entwicklung oder Staging zu verwalten.
Fügen Sie die folgenden Variablen hinzu und ersetzen Sie die Platzhalter durch die tatsächlichen Schlüssel, die Sie aus Ihrem Clerk-Konto-Dashboard erhalten haben.
# .env CLERK_PUBLISHABLE_KEY=YOUR_PUBLISHABLE_KEY CLERK_SECRET_KEY=YOUR_SECRET_KEY
Um mit dem ConfigService in der gesamten Anwendung auf Umgebungsvariablen zuzugreifen, importieren Sie das ConfigModule in das Root-AppModule.
// src/app.module.ts import { Module } from '@nestjs/common'; import { ConfigModule } from '@nestjs/config'; @Module({ imports: [ ConfigModule.forRoot({ isGlobal: true, }), ], }) export class AppModule {}
Clerk in NestJS integrieren
In diesem Abschnitt wird erläutert, wie Sie das Clerk-Backend-SDK in Ihr NestJS-Projekt integrieren und nutzen.
Erstellen eines Clerk-Client-Anbieters
Durch die Registrierung des Clerk-Clients als Anbieter kann er mithilfe eines Dekorators in Klassen eingefügt werden, sodass er überall in der Codebasis verwendet werden kann, wo er benötigt wird, wie in den kommenden Abschnitten gezeigt wird.
$ pnpm add -g @nestjs/cli $ nest new clerk-auth
Registrieren des ClerkClientProvider in AppModule
Als nächstes müssen Sie den Anbieter bei Nest registrieren, um die Abhängigkeitsinjektion zu aktivieren.
$ pnpm add @clerk/backend @nestjs/config @nestjs/passport passport passport-custom
Verwendung von Passport mit vom Sachbearbeiter ausgestelltem JWT
Clerk stellt ein JWT-Token aus, wenn sich ein Benutzer über die von Clerk gehosteten Seiten oder eine Frontend-App anmeldet oder anmeldet. Dieses Token wird dann als Bearer-Token im Authorization-Header von Anfragen an die NestJS-Backend-Anwendung gesendet.
Erstellen einer Sachbearbeiterstrategie
In NestJS ist Passport die empfohlene Methode zur Implementierung von Authentifizierungsstrategien. Sie erstellen eine benutzerdefinierte Clerk-Strategie, die Token mit dem Clerk-Client überprüft.
# .env CLERK_PUBLISHABLE_KEY=YOUR_PUBLISHABLE_KEY CLERK_SECRET_KEY=YOUR_SECRET_KEY
Die Methode „validate()“ gibt Benutzerdaten zurück, die NestJS automatisch an „request.user“ anhängt.
Erstellen eines Auth-Moduls
Erstellen Sie ein AuthModule, das die Clerk-Strategie bereitstellt und in das PassportModule integriert ist. Registrieren Sie dann das AuthModule im AppModule.
// src/app.module.ts import { Module } from '@nestjs/common'; import { ConfigModule } from '@nestjs/config'; @Module({ imports: [ ConfigModule.forRoot({ isGlobal: true, }), ], }) export class AppModule {}
// src/providers/clerk-client.provider.ts import { createClerkClient } from '@clerk/backend'; import { ConfigService } from '@nestjs/config'; export const ClerkClientProvider = { provide: 'ClerkClient', useFactory: (configService: ConfigService) => { return createClerkClient({ publishableKey: configService.get('CLERK_PUBLISHABLE_KEY'), secretKey: configService.get('CLERK_SECRET_KEY'), }); }, inject: [ConfigService], };
Implementierung von Routenschutz
Geschützte Routen sind Routen, bei denen der Benutzer authentifiziert werden muss, bevor er darauf zugreifen kann.
Erstellen eines Clerk-Authentifizierungsschutzes
Guards bestimmen anhand bestimmter Laufzeitbedingungen, ob eine bestimmte Anfrage von einem Routenhandler verarbeitet werden soll.
Wenn Sie alle Routen in Ihrer Anwendung standardmäßig schützen möchten, müssen Sie die folgenden Schritte ausführen:
- Erstellen Sie einen öffentlichen Dekorator, um Routen zu markieren, die ohne Authentifizierung zugänglich sein sollen.
- Implementieren Sie einen ClerkAuthGuard, um den Zugriff auf geschützte Routen einzuschränken, sodass nur authentifizierte Benutzer fortfahren können.
// src/app.module.ts import { Module } from '@nestjs/common'; import { ConfigModule } from '@nestjs/config'; import { ClerkClientProvider } from 'src/providers/clerk-client.provider'; @Module({ imports: [ ConfigModule.forRoot({ isGlobal: true, }), ], providers: [ClerkClientProvider], }) export class AppModule {}
// src/auth/clerk.strategy.ts import { User, verifyToken } from '@clerk/backend'; import { Injectable, Injectable, UnauthorizedException } from '@nestjs/common'; import { ConfigService } from '@nestjs/config'; import { PassportStrategy } from '@nestjs/passport'; import { Strategy } from 'passport-custom'; import { UsersService } from 'src/users/users.service'; import { Request } from 'express'; import { ClerkClient } from '@clerk/backend'; @Injectable() export class ClerkStrategy extends PassportStrategy(Strategy, 'clerk') { constructor( @Inject('ClerkClient') private readonly clerkClient: ClerkClient, private readonly configService: ConfigService, ) { super(); } async validate(req: Request): Promise<user> { const token = req.headers.authorization?.split(' ').pop(); if (!token) { throw new UnauthorizedException('No token provided'); } try { const tokenPayload = await verifyToken(token, { secretKey: this.configService.get('CLERK_SECRET_KEY'), }); const user = await this.clerkClient.users.getUser(tokenPayload.sub); return user; } catch (error) { console.error(error); throw new UnauthorizedException('Invalid token'); } } } </user>
Authentifizierung global aktivieren
Da die meisten Ihrer Endpunkte standardmäßig geschützt sind, können Sie den Authentifizierungsschutz als globalen Schutz konfigurieren.
// src/auth/auth.module.ts import { Module } from '@nestjs/common'; import { ClerkStrategy } from './clerk.strategy'; import { PassportModule } from '@nestjs/passport'; import { ClerkClientProvider } from 'src/providers/clerk-client.provider'; import { ConfigModule } from '@nestjs/config'; @Module({ imports: [PassportModule, ConfigModule], providers: [ClerkStrategy, ClerkClientProvider], exports: [PassportModule], }) export class AuthModule {}
Definieren geschützter und öffentlicher Routen
In diesen beiden Controllern wird der Public Decorator im AppController verwendet, um eine Route als öffentlich zu kennzeichnen. Im AuthController hingegen ist kein Dekorator erforderlich, um Routen als geschützt anzugeben, da der Authentifizierungsschutz standardmäßig global angewendet wird.
// src/app.module.ts import { Module } from '@nestjs/common'; import { ConfigModule } from '@nestjs/config'; import { ClerkClientProvider } from 'src/providers/clerk-client.provider'; import { AuthModule } from 'src/auth/auth.module'; @Module({ imports: [ ConfigModule.forRoot({ isGlobal: true, }), AuthModule, ], providers: [ClerkClientProvider], }) export class AppModule {}
// src/decorators/public.decorator.ts import { SetMetadata } from '@nestjs/common'; export const IS_PUBLIC_KEY = 'isPublic'; export const Public = () => SetMetadata(IS_PUBLIC_KEY, true);
Hinweis: Denken Sie daran, den AppController im AppModule und den AuthController im AuthModule zu registrieren.
Abschluss
Clerk übernimmt als Plattform die Authentifizierungs- und Sicherheitsaufgaben und hält sich dabei über die neuesten Trends und Best Practices auf dem Laufenden. Dadurch können Sie sich auf die Entwicklung der Kernfunktionen Ihrer Anwendung konzentrieren und Ihren Entwicklungsprozess beschleunigen.
In diesem Leitfaden haben wir die Schritte zur Implementierung der Clerk-Authentifizierung behandelt, von der Einrichtung des Projekts bis zur Sicherung von Routen. Diese grundlegenden Schritte sollen Ihnen den Einstieg in die Erkundung der Möglichkeiten einer Authentifizierungsdienstplattform erleichtern.
Ein voll funktionsfähiges Beispiel dieses Projekts finden Sie am Ende dieses Artikels.
thedammyking
/
Sachbearbeiter-Nest-Auth
Verwendung der Clerk-Authentifizierung und Benutzerverwaltung in der NestJS-Backend-Anwendung
Clerk-NestJS-Authentifizierung
Verwendung der Clerk-Authentifizierung und Benutzerverwaltung in der NestJS-Backend-Anwendung
Was ist drin?
Dieses Monorepo umfasst die folgenden Pakete und Apps:
Apps und Pakete
- API: eine NestJS-App
Jedes Paket und jede App besteht zu 100 % aus TypeScript.
Dienstprogramme
In diesem Monorepo sind einige zusätzliche Tools bereits für Sie eingerichtet:
- TypeScript zur statischen Typprüfung
- ESLint für Code-Linting
- Hübscher für die Codeformatierung
Das obige ist der detaillierte Inhalt vonAuthentifizierung mit Clerk in der NestJS-Serveranwendung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Detaillierte Erläuterung der Methode für JavaScript -Zeichenfolge und FAQ In diesem Artikel werden zwei Möglichkeiten untersucht, wie String -Zeichen in JavaScript ersetzt werden: Interner JavaScript -Code und interne HTML für Webseiten. Ersetzen Sie die Zeichenfolge im JavaScript -Code Die direkteste Möglichkeit ist die Verwendung der Ersatz () -Methode: str = str.replace ("find", "ersetzen"); Diese Methode ersetzt nur die erste Übereinstimmung. Um alle Übereinstimmungen zu ersetzen, verwenden Sie einen regulären Ausdruck und fügen Sie das globale Flag G hinzu:: STR = Str.Replace (/fi

Hier sind Sie also bereit, alles über dieses Ding namens Ajax zu lernen. Aber was genau ist das? Der Begriff AJAX bezieht sich auf eine lose Gruppierung von Technologien, mit denen dynamische, interaktive Webinhalte erstellt werden. Der Begriff Ajax, ursprünglich von Jesse J geprägt

In Artikel werden JavaScript -Bibliotheken erstellt, veröffentlicht und aufrechterhalten und konzentriert sich auf Planung, Entwicklung, Testen, Dokumentation und Werbestrategien.

In dem Artikel werden Strategien zur Optimierung der JavaScript -Leistung in Browsern erörtert, wobei der Schwerpunkt auf die Reduzierung der Ausführungszeit und die Minimierung der Auswirkungen auf die Lastgeschwindigkeit der Seite wird.

In dem Artikel werden effektives JavaScript -Debuggen mithilfe von Browser -Entwickler -Tools, der Schwerpunkt auf dem Festlegen von Haltepunkten, der Konsole und der Analyse der Leistung erörtert.

Bringen Sie Matrix -Filmeffekte auf Ihre Seite! Dies ist ein cooles JQuery -Plugin, das auf dem berühmten Film "The Matrix" basiert. Das Plugin simuliert die klassischen grünen Charakter-Effekte im Film und wählen Sie einfach ein Bild aus, und das Plugin verwandelt es in ein mit numerischer Zeichen gefüllte Bild im Matrix-Stil. Komm und probiere es aus, es ist sehr interessant! Wie es funktioniert Das Plugin lädt das Bild auf die Leinwand und liest die Pixel- und Farbwerte: Data = ctx.getImagedata (x, y, setting.grainize, setting.grainesize) .data Das Plugin liest geschickt den rechteckigen Bereich des Bildes und berechnet JQuery, um die durchschnittliche Farbe jedes Bereichs zu berechnen. Dann verwenden Sie

In diesem Artikel werden Sie mit der JQuery -Bibliothek ein einfaches Bildkarousel erstellen. Wir werden die BXSLIDER -Bibliothek verwenden, die auf JQuery basiert und viele Konfigurationsoptionen zum Einrichten des Karussells bietet. Heutzutage ist Picture Carousel zu einem Muss auf der Website geworden - ein Bild ist besser als tausend Wörter! Nachdem Sie sich entschieden haben, das Bild -Karussell zu verwenden, ist die nächste Frage, wie Sie es erstellen. Zunächst müssen Sie hochwertige, hochauflösende Bilder sammeln. Als nächstes müssen Sie ein Bildkarousel mit HTML und einem JavaScript -Code erstellen. Es gibt viele Bibliotheken im Web, die Ihnen helfen können, Karussell auf unterschiedliche Weise zu erstellen. Wir werden die Open -Source -BXSLIDER -Bibliothek verwenden. Die BXSLIDER -Bibliothek unterstützt reaktionsschnelles Design, sodass das mit dieser Bibliothek gebaute Karussell an alle angepasst werden kann

Datensätze sind äußerst wichtig für den Aufbau von API -Modellen und verschiedenen Geschäftsprozessen. Aus diesem Grund ist das Import und Exportieren von CSV eine häufig benötigte Funktionalität. In diesem Tutorial lernen Sie, wie Sie eine CSV-Datei in einem Angular herunterladen und importieren.


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Sicherer Prüfungsbrowser
Safe Exam Browser ist eine sichere Browserumgebung für die sichere Teilnahme an Online-Prüfungen. Diese Software verwandelt jeden Computer in einen sicheren Arbeitsplatz. Es kontrolliert den Zugriff auf alle Dienstprogramme und verhindert, dass Schüler nicht autorisierte Ressourcen nutzen.

ZendStudio 13.5.1 Mac
Leistungsstarke integrierte PHP-Entwicklungsumgebung

MinGW – Minimalistisches GNU für Windows
Dieses Projekt wird derzeit auf osdn.net/projects/mingw migriert. Sie können uns dort weiterhin folgen. MinGW: Eine native Windows-Portierung der GNU Compiler Collection (GCC), frei verteilbare Importbibliotheken und Header-Dateien zum Erstellen nativer Windows-Anwendungen, einschließlich Erweiterungen der MSVC-Laufzeit zur Unterstützung der C99-Funktionalität. Die gesamte MinGW-Software kann auf 64-Bit-Windows-Plattformen ausgeführt werden.

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

EditPlus chinesische Crack-Version
Geringe Größe, Syntaxhervorhebung, unterstützt keine Code-Eingabeaufforderungsfunktion