From 62926175ac45d695f45515c406eb84a980618478 Mon Sep 17 00:00:00 2001 From: Eric Naeseth Date: Tue, 17 Jan 2017 23:45:16 -0800 Subject: [PATCH 1/3] [passport] Fix serializeUser and deserializeUser As these functions are currently types, there's no way for the serialize or deserialize callbacks to fail and only pass an error back to Passport. --- passport/index.d.ts | 4 ++-- passport/passport-tests.ts | 30 ++++++++++++++++++++++++++---- 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/passport/index.d.ts b/passport/index.d.ts index 9f6641c552..0a8f78fb77 100644 --- a/passport/index.d.ts +++ b/passport/index.d.ts @@ -55,8 +55,8 @@ declare module 'passport' { authenticate(strategy: string|string[], options: AuthenticateOptions, callback?: Function): express.Handler; authorize(strategy: string|string[], callback?: Function): express.Handler; authorize(strategy: string|string[], options: any, callback?: Function): express.Handler; - serializeUser(fn: (user: TUser, done: (err: any, id: TID) => void) => void): void; - deserializeUser(fn: (id: TID, done: (err: any, user: TUser) => void) => void): void; + serializeUser(fn: (user: TUser, done: (err: any, id?: TID) => void) => void): void; + deserializeUser(fn: (id: TID, done: (err: any, user?: TUser) => void) => void): void; transformAuthInfo(fn: (info: any, done: (err: any, info: any) => void) => void): void; } diff --git a/passport/passport-tests.ts b/passport/passport-tests.ts index 4c1778df7f..cb13e09c6a 100644 --- a/passport/passport-tests.ts +++ b/passport/passport-tests.ts @@ -25,10 +25,32 @@ const newFramework:passport.Framework = { }; passport.use(new TestStrategy()); passport.framework(newFramework); -passport.serializeUser((user, done) => { }); -passport.serializeUser((user, done) => { }); -passport.deserializeUser((id, done) => { }); -passport.deserializeUser((id, done) => { }); + +interface TestUser { + id: number; +} +passport.serializeUser((user: TestUser, done) => { + done(null, user.id); +}); +passport.serializeUser((user, done) => { + if (user.id > 0) { + done(null, user.id); + } else { + done(new Error('user ID is invalid')) + } +}); +passport.deserializeUser((id, done) => { + done(null, {id}); +}); +passport.deserializeUser((id, done) => { + const fetchUser = (id: number): Promise => { + return Promise.reject(new Error(`user not found: ${id}`)); + }; + + fetchUser(id) + .then((user) => done(null, user)) + .catch((err) => done(err)); +}); passport.use(new TestStrategy()) .unuse('test') From e34fd986f6e93e29177180f4e273923232952d8f Mon Sep 17 00:00:00 2001 From: Eric Naeseth Date: Wed, 18 Jan 2017 10:17:25 -0800 Subject: [PATCH 2/3] Fix passport-tests.ts under TypeScript 2.0 --- passport/passport-tests.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/passport/passport-tests.ts b/passport/passport-tests.ts index cb13e09c6a..2f591623fa 100644 --- a/passport/passport-tests.ts +++ b/passport/passport-tests.ts @@ -29,7 +29,7 @@ passport.framework(newFramework); interface TestUser { id: number; } -passport.serializeUser((user: TestUser, done) => { +passport.serializeUser((user: TestUser, done: (err: any, id?: number) => void) => { done(null, user.id); }); passport.serializeUser((user, done) => { From f88d20b89118733caeb7d489afac5a5199927190 Mon Sep 17 00:00:00 2001 From: Eric Naeseth Date: Tue, 7 Feb 2017 11:19:14 -0800 Subject: [PATCH 3/3] Add missing semicolon to passport-tests --- passport/passport-tests.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/passport/passport-tests.ts b/passport/passport-tests.ts index 2f591623fa..c461d45562 100644 --- a/passport/passport-tests.ts +++ b/passport/passport-tests.ts @@ -36,7 +36,7 @@ passport.serializeUser((user, done) => { if (user.id > 0) { done(null, user.id); } else { - done(new Error('user ID is invalid')) + done(new Error('user ID is invalid')); } }); passport.deserializeUser((id, done) => {