(core) Fix recording of signups, and record as telemetry too.

Summary:
Previously we failed to log signup info for users who signed up via
Google. This fixes that issue by recording it on first post-signup
visit. It also includes signup as a new telemetry event, recorded at the
same point.

Test Plan: Tested locally to see that a signup produces an appropriate log message and telemetry event.

Reviewers: georgegevoian

Reviewed By: georgegevoian

Differential Revision: https://phab.getgrist.com/D3921
This commit is contained in:
Dmitry S 2023-06-14 20:03:17 -04:00
parent f873b38e8f
commit 41280a31f2
3 changed files with 28 additions and 0 deletions

View File

@ -404,6 +404,28 @@ export const TelemetryContracts: TelemetryContracts = {
}, },
}, },
}, },
signupFirstVisit: {
description: 'Triggered when a new user first opens the Grist app',
minimumTelemetryLevel: Level.full,
metadataContracts: {
siteId: {
description: 'The site id of first visit after signup.',
dataType: 'number',
},
siteType: {
description: 'The site type of first visit after signup.',
dataType: 'string',
},
userId: {
description: 'The id of the user that signed up.',
dataType: 'number',
},
altSessionId: {
description: 'A random, session-based identifier for the user that triggered this event.',
dataType: 'string',
},
},
},
signupVerified: { signupVerified: {
description: 'Triggered after a user successfully verifies their account during sign-up. ' description: 'Triggered after a user successfully verifies their account during sign-up. '
+ 'Not triggered in grist-core.', + 'Not triggered in grist-core.',
@ -583,6 +605,7 @@ export const TelemetryEvents = StringUnion(
'documentUsage', 'documentUsage',
'processMonitor', 'processMonitor',
'sendingWebhooks', 'sendingWebhooks',
'signupFirstVisit',
'signupVerified', 'signupVerified',
'siteMembership', 'siteMembership',
'siteUsage', 'siteUsage',

View File

@ -866,6 +866,9 @@ export class FlexServer implements GristServer {
recordSignUpEvent: true recordSignUpEvent: true
}}); }});
// Give a chance to the login system to react to the first visit after signup.
this._loginMiddleware.onFirstVisit?.(req);
const domain = mreq.org ?? null; const domain = mreq.org ?? null;
if (!process.env.GRIST_SINGLE_ORG && this._dbManager.isMergedOrg(domain)) { if (!process.env.GRIST_SINGLE_ORG && this._dbManager.isMergedOrg(domain)) {
// We're logging in for the first time on the merged org; if the user has // We're logging in for the first time on the merged org; if the user has

View File

@ -75,6 +75,8 @@ export interface GristLoginMiddleware {
// or null if anonymous (and other methods of determining profile such // or null if anonymous (and other methods of determining profile such
// as a cookie should not be used), or undefined to use other methods. // as a cookie should not be used), or undefined to use other methods.
getProfile?(req: express.Request|IncomingMessage): Promise<UserProfile|null|undefined>; getProfile?(req: express.Request|IncomingMessage): Promise<UserProfile|null|undefined>;
// Called on first visit to an app page after a signup, for reporting or telemetry purposes.
onFirstVisit?(req: express.Request): void;
} }
/** /**