前置条件
- Firebase Project:通过
- Firebase CLI:已安装并登录(参见
firebase-basics)。
npx -y firebase-tools@latest projects:create 创建(参见 firebase-basics)。
核心概念
Firebase Authentication 提供后端服务、易于使用的 SDK,以及现成的 UI 库,用于对用户进行身份验证,使其登录你的应用。
用户
用户是可以登录你的应用的实体。每个用户都由唯一 ID(uid)标识,并且保证在所有提供方之间唯一。用户属性包括:
uid:唯一标识符。email:用户的电子邮件地址(如果可用)。displayName:用户的显示名称(如果可用)。photoURL:用户照片的 URL(如果可用)。emailVerified:布尔值,指示电子邮件是否已验证。
身份提供方
Firebase Auth 支持多种登录方式:
- Email/Password:基本的电子邮件和密码身份验证。
- Federated Identity Providers:Google、Facebook、Twitter、GitHub、
- Phone Number:基于短信的身份验证。
- Anonymous:临时访客账户,之后可以关联到永久账户。
- Custom Auth:与你现有的身份验证系统集成。
Microsoft、Apple 等。
推荐将 Google Sign In 作为良好且安全的默认提供方。
令牌
用户登录时,会收到一个 ID Token(JWT)。当向 Firebase 服务(Realtime Database、 Cloud Storage、Firestore)或你自己的后端发出请求时,使用此令牌标识用户。
- ID Token:短期有效(1 小时),用于验证身份。
- Refresh Token:长期有效,用于获取新的 ID 令牌。
工作流
1. 预配
选项 1。通过 CLI 启用身份验证
仅可通过 CLI 启用 Google Sign In、匿名身份验证和电子邮件/密码身份验证。对于其他提供方,请使用 Firebase Console。
通过在 firebase.json 中添加一个 'auth' 块来配置 Firebase Authentication:
{
"auth": {
"authorizedDomains": ["localhost"],
"providers": {
"anonymous": true,
"emailPassword": true,
"googleSignIn": {
"oAuthBrandDisplayName": "Your Brand Name",
"supportEmail": "support@example.com"
}
}
}
}
[!NOTE] 如果 Google Sign-In 弹窗打开后立即关闭,并显示错误
[firebase_auth/unauthorized-domain],则表示该域名未获授权。对于本地开发,请确保
localhost 包含在 Firebase Console 的 Authorized Domains 列表中,或通过
firebase.json中的authorizedDomains字段包含。 CRITICAL:不要在
Authorized Domains 列表中包含协议或端口号(例如,使用 localhost,
不要使用 http://localhost:9090)。
CRITICAL:配置 firebase.json 后,你 MUST 将身份验证配置部署到 Firebase 后端,更改才能生效。这对于 Google Sign-In、电子邮件/密码等身份验证提供方为应用平台自动生成所需的 OAuth 客户端至关重要。运行:
npx -y firebase-tools@latest deploy --only auth
选项 2。在 Console 中启用身份验证
在 Firebase Console 中启用其他提供方。
- 前往
- 选择你的项目。
- 启用所需的登录提供方(例如,Email/Password、Google)。
https://console.firebase.google.com/project/_/authentication/providers
2. 客户端设置与使用
Web 参见 [references/client_sdk_web.md](references/client_sdk_web.md)。
Flutter 参见 [references/flutter_setup.md](references/flutter_setup.md)。 Android (Kotlin) 参见 [references/client_sdk_android.md](references/client_sdk_android.md)。
3. 安全规则
使用 Firestore/Storage 规则中的 request.auth 保护你的数据。
参见 [references/security_rules.md](references/security_rules.md)。