thunderid-nestjs
v0.1.0
Published
NestJS SDK for ThunderID (community-maintained)
Readme
thunderid-nestjs
NestJS SDK for ThunderID. Built on top of
@thunderid/express — works with NestJS applications running on
the default Express platform.
Community-maintained — ported from thunder-id/javascript-sdks#26.
Installation
npm install thunderid-nestjs cookie-parserSetup
Register cookie-parser and the ThunderID module:
// main.ts
import cookieParser from 'cookie-parser';
const app = await NestFactory.create(AppModule);
app.use(cookieParser());// app.module.ts
import {ThunderIDModule} from 'thunderid-nestjs';
@Module({
imports: [
ThunderIDModule.forRoot({
clientId: process.env.THUNDERID_CLIENT_ID,
baseUrl: process.env.THUNDERID_BASE_URL,
}),
],
})
export class AppModule {}The module is global — ThunderIDService and ThunderIDGuard are injectable everywhere.
Sign-in / sign-out routes
import {Request, Response} from 'express';
import {ThunderIDService} from 'thunderid-nestjs';
@Controller()
export class AuthController {
constructor(private readonly thunderID: ThunderIDService) {}
@Get('login')
async login(@Req() req: Request, @Res() res: Response) {
const tokens = await this.thunderID.signIn(req, res);
if (tokens.accessToken || tokens.idToken) {
res.redirect('/');
}
// If no tokens were returned, signIn has already redirected the
// response to the ThunderID sign-in page.
}
@Get('logout')
async logout(@Req() req: Request, @Res() res: Response) {
if (this.thunderID.isSignOutSuccess(req)) {
res.redirect('/');
return;
}
await this.thunderID.signOut(req, res);
}
}Protecting routes
import {CurrentUser, ThunderIDGuard, User} from 'thunderid-nestjs';
@Controller()
export class ProfileController {
@UseGuards(ThunderIDGuard)
@Get('profile')
profile(@CurrentUser() user: User) {
return user;
}
}ThunderIDGuard returns 401 Unauthorized for requests without a valid session. @CurrentUser() resolves the
authenticated user attached by the guard.
API
| Export | Description |
| --------------------------------- | ------------------------------------------------------------------------------------------------------------------ |
| ThunderIDModule.forRoot(config) | Global module; accepts ThunderIDNestConfig (same shape as the Node SDK config) |
| ThunderIDService | signIn(req, res), signOut(req, res), isSignOutSuccess(req), isSignedIn(req), getUser(req), getClient() |
| ThunderIDGuard | Route guard that blocks unauthenticated requests |
| @CurrentUser() | Param decorator resolving the authenticated User (requires ThunderIDGuard) |
Everything from @thunderid/express (and transitively @thunderid/node / @thunderid/javascript) is re-exported.
Contributing
See CONTRIBUTING.md.
Contributors
Thanks goes to these people. Add yourself by commenting on your merged PR:
@all-contributors please add @<username> for code.
License
Apache-2.0
