[PR #7840] [MERGED] fix: handle personal Microsoft account name mapping in Entra ID provider #7586

Closed
opened 2026-03-13 13:42:19 -05:00 by GiteaMirror · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/better-auth/better-auth/pull/7840
Author: @liuxiaopai-ai
Created: 2/7/2026
Status: Merged
Merged: 2/28/2026
Merged by: @Bekacru

Base: mainHead: fix/entra-id-personal-account-name


📝 Commits (1)

  • 0da6b0c fix: handle personal Microsoft account name mapping in Entra ID provider

📊 Changes

3 files changed (+162 additions, -4 deletions)

View changed files

📝 packages/better-auth/src/plugins/generic-oauth/generic-oauth.test.ts (+136 -0)
📝 packages/better-auth/src/plugins/generic-oauth/providers/microsoft-entra-id.ts (+16 -3)
📝 packages/core/src/social-providers/microsoft-entra-id.ts (+10 -1)

📄 Description

Summary

Fixes #7787

When using the Microsoft Entra ID provider with personal Microsoft accounts (e.g., Outlook/Hotmail), the getUserInfo function fails to resolve the user name, resulting in a name_is_missing error.

Problem

Personal Microsoft accounts return user profile data with different field names than work/school (enterprise) accounts:

  • Work accounts: name, given_name, family_name
  • Personal accounts: may omit name entirely, and return givenname/familyname (no underscore) instead of given_name/family_name

Both the core social provider (packages/core/src/social-providers/microsoft-entra-id.ts) and the generic-oauth provider helper (packages/better-auth/src/plugins/generic-oauth/providers/microsoft-entra-id.ts) did not account for these variations.

Changes

Core social provider (packages/core/src/social-providers/microsoft-entra-id.ts):

  • Added name resolution fallback chain: namegiven_name + family_nameemailpreferred_username

Generic OAuth provider helper (packages/better-auth/src/plugins/generic-oauth/providers/microsoft-entra-id.ts):

  • Added givenname and familyname (no underscore) fields to the MicrosoftEntraIdProfile interface
  • Updated name resolution to handle both given_name/family_name and givenname/familyname variants
  • Added fallback to email and preferred_username when no name fields are present

Tests (packages/better-auth/src/plugins/generic-oauth/generic-oauth.test.ts):

  • Added 5 test cases covering all name resolution scenarios:
    • Work account with name field
    • Missing name with given_name + family_name fallback
    • Personal account with givenname + familyname (no underscore) fallback
    • Fallback to email when no name fields present
    • Fallback to preferred_username as last resort

Summary by cubic

Fixes name resolution for personal Microsoft accounts in the Entra ID provider, preventing name_is_missing errors and ensuring consistent display names across work and personal accounts.

  • Bug Fixes
    • Core provider: add fallback chain for name resolution: name → given_name+family_name → email → preferred_username.
    • Generic OAuth helper: support personal account fields (givenname/familyname), handle both underscore and non-underscore variants, and fall back to email/preferred_username.
    • Tests: add cases for work vs personal profiles and all fallback paths.

Written for commit 0da6b0cff6. Summary will update on new commits.


🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/better-auth/better-auth/pull/7840 **Author:** [@liuxiaopai-ai](https://github.com/liuxiaopai-ai) **Created:** 2/7/2026 **Status:** ✅ Merged **Merged:** 2/28/2026 **Merged by:** [@Bekacru](https://github.com/Bekacru) **Base:** `main` ← **Head:** `fix/entra-id-personal-account-name` --- ### 📝 Commits (1) - [`0da6b0c`](https://github.com/better-auth/better-auth/commit/0da6b0cff624467192fbc1565c17fc2a9fc689ca) fix: handle personal Microsoft account name mapping in Entra ID provider ### 📊 Changes **3 files changed** (+162 additions, -4 deletions) <details> <summary>View changed files</summary> 📝 `packages/better-auth/src/plugins/generic-oauth/generic-oauth.test.ts` (+136 -0) 📝 `packages/better-auth/src/plugins/generic-oauth/providers/microsoft-entra-id.ts` (+16 -3) 📝 `packages/core/src/social-providers/microsoft-entra-id.ts` (+10 -1) </details> ### 📄 Description ## Summary Fixes #7787 When using the Microsoft Entra ID provider with personal Microsoft accounts (e.g., Outlook/Hotmail), the `getUserInfo` function fails to resolve the user name, resulting in a `name_is_missing` error. ### Problem Personal Microsoft accounts return user profile data with different field names than work/school (enterprise) accounts: - **Work accounts**: `name`, `given_name`, `family_name` - **Personal accounts**: may omit `name` entirely, and return `givenname`/`familyname` (no underscore) instead of `given_name`/`family_name` Both the core social provider (`packages/core/src/social-providers/microsoft-entra-id.ts`) and the generic-oauth provider helper (`packages/better-auth/src/plugins/generic-oauth/providers/microsoft-entra-id.ts`) did not account for these variations. ### Changes **Core social provider** (`packages/core/src/social-providers/microsoft-entra-id.ts`): - Added name resolution fallback chain: `name` → `given_name + family_name` → `email` → `preferred_username` **Generic OAuth provider helper** (`packages/better-auth/src/plugins/generic-oauth/providers/microsoft-entra-id.ts`): - Added `givenname` and `familyname` (no underscore) fields to the `MicrosoftEntraIdProfile` interface - Updated name resolution to handle both `given_name`/`family_name` and `givenname`/`familyname` variants - Added fallback to `email` and `preferred_username` when no name fields are present **Tests** (`packages/better-auth/src/plugins/generic-oauth/generic-oauth.test.ts`): - Added 5 test cases covering all name resolution scenarios: - Work account with `name` field - Missing `name` with `given_name` + `family_name` fallback - Personal account with `givenname` + `familyname` (no underscore) fallback - Fallback to `email` when no name fields present - Fallback to `preferred_username` as last resort <!-- This is an auto-generated description by cubic. --> --- ## Summary by cubic Fixes name resolution for personal Microsoft accounts in the Entra ID provider, preventing name_is_missing errors and ensuring consistent display names across work and personal accounts. - **Bug Fixes** - Core provider: add fallback chain for name resolution: name → given_name+family_name → email → preferred_username. - Generic OAuth helper: support personal account fields (givenname/familyname), handle both underscore and non-underscore variants, and fall back to email/preferred_username. - Tests: add cases for work vs personal profiles and all fallback paths. <sup>Written for commit 0da6b0cff624467192fbc1565c17fc2a9fc689ca. Summary will update on new commits.</sup> <!-- End of auto-generated description by cubic. --> --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
GiteaMirror added the pull-request label 2026-03-13 13:42:19 -05:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github-starred/better-auth#7586