Skip to content

Commit

Permalink
fix: Parameters missing in afterFind trigger of authentication adap…
Browse files Browse the repository at this point in the history
…ters (#8458)
  • Loading branch information
dblythy committed Mar 6, 2023
1 parent d05cfcd commit ce34747
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 4 deletions.
13 changes: 13 additions & 0 deletions spec/AuthenticationAdaptersV2.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -347,12 +347,25 @@ describe('Auth Adapter features', () => {

it('should strip out authData if required', async () => {
const spy = spyOn(modernAdapter3, 'validateOptions').and.callThrough();
const afterSpy = spyOn(modernAdapter3, 'afterFind').and.callThrough();
await reconfigureServer({ auth: { modernAdapter3 }, silent: false });
const user = new Parse.User();
await user.save({ authData: { modernAdapter3: { id: 'modernAdapter3Data' } } });
await user.fetch({ sessionToken: user.getSessionToken() });
const authData = user.get('authData').modernAdapter3;
expect(authData).toEqual({ foo: 'bar' });
for (const call of afterSpy.calls.all()) {
const args = call.args[0];
if (args.user) {
user._objCount = args.user._objCount;
break;
}
}
expect(afterSpy).toHaveBeenCalledWith(
{ ip: '127.0.0.1', user, master: false },
{ id: 'modernAdapter3Data' },
undefined
);
expect(spy).toHaveBeenCalled();
});

Expand Down
9 changes: 7 additions & 2 deletions src/Adapters/Auth/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -214,7 +214,7 @@ module.exports = function (authOptions = {}, enableAnonymousUsers = true) {
return { validator: authDataValidator(provider, adapter, appIds, providerOptions), adapter };
};

const runAfterFind = async authData => {
const runAfterFind = async (req, authData) => {
if (!authData) {
return;
}
Expand All @@ -230,7 +230,12 @@ module.exports = function (authOptions = {}, enableAnonymousUsers = true) {
providerOptions,
} = authAdapter;
if (afterFind && typeof afterFind === 'function') {
const result = afterFind(authData[provider], providerOptions);
const requestObject = {
ip: req.config.ip,
user: req.auth.user,
master: req.auth.isMaster,
};
const result = afterFind(requestObject, authData[provider], providerOptions);
if (result) {
authData[provider] = result;
}
Expand Down
7 changes: 6 additions & 1 deletion src/RestQuery.js
Original file line number Diff line number Diff line change
Expand Up @@ -850,7 +850,12 @@ RestQuery.prototype.handleAuthAdapters = async function () {
return;
}
await Promise.all(
this.response.results.map(result => this.config.authDataManager.runAfterFind(result.authData))
this.response.results.map(result =>
this.config.authDataManager.runAfterFind(
{ config: this.config, auth: this.auth },
result.authData
)
)
);
};

Expand Down
2 changes: 1 addition & 1 deletion src/Routers/UsersRouter.js
Original file line number Diff line number Diff line change
Expand Up @@ -292,7 +292,7 @@ export class UsersRouter extends ClassesRouter {
if (authDataResponse) {
user.authDataResponse = authDataResponse;
}
await req.config.authDataManager.runAfterFind(user.authData);
await req.config.authDataManager.runAfterFind(req, user.authData);

return { response: user };
}
Expand Down

0 comments on commit ce34747

Please sign in to comment.