diff --git a/spec/AuthenticationAdaptersV2.spec.js b/spec/AuthenticationAdaptersV2.spec.js index 4c63b9a1ef0..95076911143 100644 --- a/spec/AuthenticationAdaptersV2.spec.js +++ b/spec/AuthenticationAdaptersV2.spec.js @@ -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(); }); diff --git a/src/Adapters/Auth/index.js b/src/Adapters/Auth/index.js index 3440208ebd1..2defcb0dc0c 100755 --- a/src/Adapters/Auth/index.js +++ b/src/Adapters/Auth/index.js @@ -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; } @@ -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; } diff --git a/src/RestQuery.js b/src/RestQuery.js index 1f4304e78ad..fe3617eb1b7 100644 --- a/src/RestQuery.js +++ b/src/RestQuery.js @@ -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 + ) + ) ); }; diff --git a/src/Routers/UsersRouter.js b/src/Routers/UsersRouter.js index e26d2ef141f..feca46e802d 100644 --- a/src/Routers/UsersRouter.js +++ b/src/Routers/UsersRouter.js @@ -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 }; }