Firebase Auth & Realtime Database Apps · Урок

Связывание аккаунтов и управление провайдерами

Позвольте одному пользователю владеть единым аккаунтом при разных способах входа: безопасно связывайте и отвязывайте провайдеров аутентификации, обрабатывайте конфликты и управляйте связанными учётными данными.

Урок 4 из 413 шагов

«Связывание аккаунтов и управление провайдерами» — бесплатный урок Firebase Auth & Realtime Database Apps на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Firebase Auth & Realtime Database Apps, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Firebase Auth & Realtime Database Apps содержит 4 уроков всего.

Части этого урока еще не переведены и отображаются на английском.

The Multi-Provider Problem

The same person may sign in with email/password today and Google tomorrow. Without linking, Firebase could treat these as two separate accounts.

Account linking unifies multiple sign-in methods under one Firebase user (one uid).

How Linking Works

Linking attaches an additional credential to the currently signed-in user. The user keeps the same uid and data, but gains a new way to log in.

  • Email/password can be linked to a social account
  • Multiple social providers can coexist

Linking a Provider

Use linkWithPopup on the current user to add another provider interactively.

import { getAuth, GoogleAuthProvider, linkWithPopup } from 'firebase/auth';

const user = getAuth().currentUser;
await linkWithPopup(user, new GoogleAuthProvider());
console.log('Google linked to existing account');

Linking a Credential Directly

When you already hold a credential (for example email/password the user just typed), use linkWithCredential.

import { EmailAuthProvider, linkWithCredential } from 'firebase/auth';

const cred = EmailAuthProvider.credential(email, password);
await linkWithCredential(getAuth().currentUser, cred);

The Collision Error

If the new provider's email already belongs to a different account, Firebase throws auth/account-exists-with-different-credential. This is the key case you must handle.

Resolving a Collision

To resolve it: read the conflicting email, ask the user to sign in with the existing provider, then link the new credential onto that account.

import { fetchSignInMethodsForEmail } from 'firebase/auth';

const methods = await fetchSignInMethodsForEmail(auth, email);
// prompt user to sign in with methods[0], then link pendingCred

Inspecting Linked Providers

The user object exposes providerData, an array describing every linked provider. Use it to render a 'connected accounts' settings screen.

const user = getAuth().currentUser;
user.providerData.forEach(p => console.log(p.providerId));

Unlinking a Provider

Let users disconnect a method with unlink, passing the provider ID. Always keep at least one sign-in method so the account stays accessible.

import { unlink } from 'firebase/auth';

await unlink(getAuth().currentUser, 'google.com');

Guarding the Last Provider

Before unlinking, check that more than one provider remains. Removing the only method would orphan the user.

const user = getAuth().currentUser;
if (user.providerData.length <= 1) {
  showError('You must keep at least one sign-in method.');
  return;
}

Reauthentication for Sensitive Changes

Linking or unlinking is a sensitive operation. If the user's session is old, Firebase may require recent login and throw auth/requires-recent-login. Reauthenticate before retrying.

import { reauthenticateWithPopup } from 'firebase/auth';

await reauthenticateWithPopup(user, new GoogleAuthProvider());

Design Considerations

Plan your identity model up front:

  • Treat email as the unifying key when possible
  • Surface linked accounts in user settings
  • Always handle the collision error gracefully

Quick Check

Test your understanding of account linking.

Recap

You can now unify identities across providers.

  • Link with linkWithPopup or linkWithCredential
  • Handle account-exists-with-different-credential
  • Inspect providerData and unlink safely
  • Always keep at least one provider
  • Reauthenticate for sensitive changes
Можно начать бесплатно

Изучай Firebase Auth & Realtime Database Apps с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
11
Уроки
44

Часто задаваемые вопросы

Урок «Связывание аккаунтов и управление провайдерами» бесплатный?

Да — полный текст урока «Связывание аккаунтов и управление провайдерами» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Firebase Auth & Realtime Database Apps, подпишись на CoddyKit PRO. Курс Firebase Auth & Realtime Database Apps содержит 4 уроков всего.

Чему я научусь в уроке «Связывание аккаунтов и управление провайдерами»?

Позвольте одному пользователю владеть единым аккаунтом при разных способах входа: безопасно связывайте и отвязывайте провайдеров аутентификации, обрабатывайте конфликты и управляйте связанными учётны… Ты практикуешь Firebase Auth & Realtime Database Apps с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Firebase Auth & Realtime Database Apps?

Предыдущий опыт не требуется. Firebase Auth & Realtime Database Apps на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Связывание аккаунтов и управление провайдерами»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Firebase Auth & Realtime Database Apps?

Да. Каждый урок Firebase Auth & Realtime Database Apps включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Аутентификация по номеру телефона
  2. Многофакторная аутентификация (MFA)
  3. Пользовательские утверждения и правила безопасности
  4. Связывание аккаунтов и управление провайдерами
← Назад к Firebase Auth & Realtime Database Apps