Skip to content

Duplicate CTMS records created during FxA email workflow #1017

Description

@robhudson

Description

A workflow involving changes to primary and secondary emails in a Mozilla Account can lead to duplicate records in CTMS. This creates inconsistencies in how user data and subscriptions are represented.

Steps to Reproduce

  1. Create a Mozilla Account using an email address userA@example.com.
    • This creates CTMS user 1 with emails.primary_email and fxa.primary_email set to userA@example.com.
  2. Add a second email address userB@example.com as a secondary email but do not make it the primary email.
    • In CTMS, this is not recorded. It's only an FxA change at this point.
  3. Use the secondary email address userB@example.com to sign up for a newsletter on the website.
    • This creates CMTS user 2 with emails.primary_email set to userB@example.com.
  4. Go back to the Mozilla Account and make the secondary email userB@example.com the primary email.
    • For CTMS user 1 this updates fxa.primary_email to userB@example.com while keeping the emails.primary_email value of userA@example.com.
    • CTMS user 1's fxa.primary_email now conflicts with CTMS user 2's emails.primary_email.

Observed Behavior

  • Two CTMS records are created:
    1. CTMS user 1 with:
      • emails.primary_email: userA@example.com
      • fxa.primary_email: userB@example.com
    2. CTMS user 2 with:
      • emails.primary_email: userB@example.com.

Steps to Reproduce - Alternate workflow

  1. Create a Mozilla Account using an email address userA@example.com.
    • This creates CTMS user 1 with emails.primary_email and fxa.primary_email set to userA@example.com.
  2. Add a second email address userB@example.com as a secondary email and make it the primary email.
    • In CTMS this updates fxa.primary_email to userB@example.com.
  3. Use the email address userB@example.com to sign up for a newsletter on the website.
    • This creates CMTS user 2 with emails.primary_email set to userB@example.com.

Observed Behavior

  • Two CTMS records are created:
    1. CTMS user 1 with:
      • emails.primary_email: userA@example.com
      • fxa.primary_email: userB@example.com
    2. CTMS user 2 with:
      • emails.primary_email: userB@example.com.

Expected Behavior

  • There should be only one CTMS record for the user:
  • To fix this issue, define and implement a solution to merge 2 contacts.

Additional Considerations

  • The emails table includes a basket_token, which allows users to navigate to the preference center.
  • If records are merged, take into consideration which basket_token remains functional so users can access the preference center.
  • Perhaps a system notification email is sent notifying the user of the merge and providing the chosen basket token as a reference. The other basket token will result in a 404 from that point forward.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions