Skip to content

Commit ae07ccf

Browse files
svenefftingeAlexTugarev
authored andcommitted
[server] don't use single strategy
as it is modified by calls to passport.authenticate
1 parent bf277c3 commit ae07ccf

File tree

1 file changed

+8
-7
lines changed

1 file changed

+8
-7
lines changed

components/server/src/auth/generic-auth-provider.ts

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -66,12 +66,8 @@ export class GenericAuthProvider implements AuthProvider {
6666
@inject(AuthProviderService) protected readonly authProviderService: AuthProviderService;
6767
@inject(LoginCompletionHandler) protected readonly loginCompletionHandler: LoginCompletionHandler;
6868

69-
protected strategy: GenericOAuth2Strategy;
70-
7169
@postConstruct()
7270
init() {
73-
this.strategy = new GenericOAuth2Strategy(this.strategyName, { ...this.defaultStrategyOptions },
74-
async (req, accessToken, refreshToken, tokenResponse, _profile, done) => await this.verify(req, accessToken, refreshToken, tokenResponse, _profile, done));
7571
this.initAuthUserSetup();
7672
log.info(`(${this.strategyName}) Initialized.`, { defaultStrategyOptions: this.defaultStrategyOptions });
7773
}
@@ -131,10 +127,15 @@ export class GenericAuthProvider implements AuthProvider {
131127
protected readAuthUserSetup?: (accessToken: string, tokenResponse: object) => Promise<AuthUserSetup>;
132128

133129
authorize(req: express.Request, res: express.Response, next: express.NextFunction, scope?: string[]): void {
134-
const handler = passport.authenticate(this.strategy as any, { ...this.defaultStrategyOptions, ...{ scope } });
130+
const handler = passport.authenticate(this.getStrategy() as any, { ...this.defaultStrategyOptions, ...{ scope } });
135131
handler(req, res, next);
136132
}
137133

134+
protected getStrategy() {
135+
return new GenericOAuth2Strategy(this.strategyName, { ...this.defaultStrategyOptions },
136+
async (req, accessToken, refreshToken, tokenResponse, _profile, done) => await this.verify(req, accessToken, refreshToken, tokenResponse, _profile, done));
137+
}
138+
138139
async refreshToken(user: User) {
139140
log.info(`(${this.strategyName}) Token to be refreshed.`, { userId: user.id });
140141
const { authProviderId } = this;
@@ -152,7 +153,7 @@ export class GenericAuthProvider implements AuthProvider {
152153
}
153154
try {
154155
const refreshResult = await new Promise<{ access_token: string, refresh_token: string, result: any }>((resolve, reject) => {
155-
this.strategy.requestNewAccessToken(refreshToken, {}, (error, access_token, refresh_token, result) => {
156+
this.getStrategy().requestNewAccessToken(refreshToken, {}, (error, access_token, refresh_token, result) => {
156157
if (error) {
157158
reject(error);
158159
return;
@@ -297,7 +298,7 @@ export class GenericAuthProvider implements AuthProvider {
297298
let result: Parameters<VerifyCallback>;
298299
try {
299300
result = await new Promise((resolve) => {
300-
const authenticate = passport.authenticate(this.strategy as any, (...params: Parameters<VerifyCallback>) => resolve(params));
301+
const authenticate = passport.authenticate(this.getStrategy() as any, (...params: Parameters<VerifyCallback>) => resolve(params));
301302
authenticate(request, response, next);
302303
})
303304
} catch (error) {

0 commit comments

Comments
 (0)