diff --git a/lib/passport/passport.serializer.ts b/lib/passport/passport.serializer.ts index 634e2d11..1083bb44 100644 --- a/lib/passport/passport.serializer.ts +++ b/lib/passport/passport.serializer.ts @@ -1,13 +1,46 @@ +import { IncomingMessage } from 'http'; import * as passport from 'passport'; -export abstract class PassportSerializer { - abstract serializeUser(user: any, done: Function); - abstract deserializeUser(payload: any, done: Function); +export abstract class PassportSerializer< + UserType extends unknown = unknown, + PayloadType extends unknown = unknown, + RequestType extends IncomingMessage = IncomingMessage +> { + abstract serializeUser( + user: UserType, + req?: RequestType + ): Promise; + abstract deserializeUser( + payload: PayloadType, + req?: RequestType + ): Promise; constructor() { - passport.serializeUser((user, done) => this.serializeUser(user, done)); - passport.deserializeUser((payload, done) => - this.deserializeUser(payload, done) + passport.serializeUser( + async ( + req: RequestType, + user: UserType, + done: (err: unknown, payload?: PayloadType) => unknown + ) => { + try { + done(null, await this.serializeUser(user, req)); + } catch (err) { + done(err); + } + } + ); + passport.deserializeUser( + async ( + req: RequestType, + payload: PayloadType, + done: (err: unknown, user?: UserType) => unknown + ) => { + try { + done(null, await this.deserializeUser(payload, req)); + } catch (err) { + done(err); + } + } ); } } diff --git a/package-lock.json b/package-lock.json index 26725363..e07ad4a7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -96,9 +96,9 @@ "dev": true }, "@types/express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.1.tgz", - "integrity": "sha512-VfH/XCP0QbQk5B5puLqTLEeFgR8lfCJHZJKkInZ9mkYd+u8byX0kztXEQxEk4wZXJs8HI+7km2ALXjn4YKcX9w==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.2.tgz", + "integrity": "sha512-5mHFNyavtLoJmnusB8OKJ5bshSzw+qkMIBAobLrIM48HJvunFva9mOa6aBwh64lBFyNwBbs0xiEFuj4eU/NjCA==", "dev": true, "requires": { "@types/body-parser": "*", @@ -107,9 +107,9 @@ } }, "@types/express-serve-static-core": { - "version": "4.16.9", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.16.9.tgz", - "integrity": "sha512-GqpaVWR0DM8FnRUJYKlWgyARoBUAVfRIeVDZQKOttLFp5SmhhF9YFIYeTPwMd/AXfxlP7xVO2dj1fGu0Q+krKQ==", + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.0.tgz", + "integrity": "sha512-Xnub7w57uvcBqFdIGoRg1KhNOeEj0vB6ykUM7uFWyxvbdE89GFyqgmUcanAriMr4YOxNFZBAWkfcWIb4WBPt3g==", "dev": true, "requires": { "@types/node": "*", @@ -152,9 +152,9 @@ "dev": true }, "@types/passport": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/passport/-/passport-1.0.1.tgz", - "integrity": "sha512-oK87JjN8i8kmqb0RN0sCUB/ZjrWf3b8U45eAzZVy1ssYYgBrMOuALmvoqp7MglsilXAjxum+LS29VQqeQx6ddA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/passport/-/passport-1.0.2.tgz", + "integrity": "sha512-Pf39AYKf8q+YoONym3150cEwfUD66dtwHJWvbeOzKxnA0GZZ/vAXhNWv9vMhKyRQBQZiQyWQnhYBEBlKW6G8wg==", "dev": true, "requires": { "@types/express": "*" diff --git a/package.json b/package.json index 5ba4f23a..b8808f8b 100644 --- a/package.json +++ b/package.json @@ -1,12 +1,11 @@ { "name": "@nestjs/passport", "version": "6.1.0", - "description": - "Nest - modern, fast, powerful node.js web framework (@passport)", + "description": "Nest - modern, fast, powerful node.js web framework (@passport)", "author": "Kamil Mysliwiec", "license": "MIT", "scripts": { - "build": "rm -rf dist && tsc -p tsconfig.json", + "build": "rimraf dist && tsc -p tsconfig.json", "precommit": "lint-staged", "prepublish:npm": "npm run build", "publish:npm": "npm publish --access public" @@ -18,16 +17,20 @@ "devDependencies": { "@nestjs/common": "6.8.5", "@types/node": "11.15.0", - "@types/passport": "1.0.1", + "@types/passport": "1.0.2", "husky": "3.0.9", "lint-staged": "9.4.2", "passport": "0.4.0", "prettier": "1.18.2", "reflect-metadata": "0.1.13", + "rimraf": "^3.0.0", "rxjs": "6.5.3", "typescript": "3.6.4" }, "lint-staged": { - "*.ts": ["prettier --write", "git add"] + "*.ts": [ + "prettier --write", + "git add" + ] } }