8.7 版本发布—WinterCG 兼容性第一部分
了解更多

在 GitHub 上查看

@nativescript/firebase-auth

简介

一个允许您将 Firebase 身份验证 添加到 NativeScript 应用的插件。

image

注意

在您的应用中初始化 Firebase 时,请将此插件与 @nativescript/firebase-core 插件一起使用。

安装

在项目的根目录中运行以下命令来安装插件。

cli
npm install @nativescript/firebase-auth

使用 @nativescript/firebase-auth

在使用 Firebase Auth 之前,请确保已初始化 Firebase。

要创建新的 Firebase Auth 实例,请在 firebase 实例上调用 auth 方法,如下所示

ts
import { firebase } from '@nativescript/firebase-core'
import '@nativescript/firebase-auth' // only needs to be imported 1x

const auth = firebase().auth()

默认情况下,这允许您使用在平台上安装 Firebase 时使用的默认 Firebase 应用与 Firebase Auth 进行交互。但是,如果您想使用辅助 Firebase 应用,请使用 FirebaseApp 实例调用 auth 方法。

ts
import { firebase } from '@nativescript/firebase-core'
import '@nativescript/firebase-auth'

// create secondary app instance
const config = new FirebaseOptions()
const secondaryApp = firebase.initializeApp(config, 'SECONDARY_APP')

const auth = firebase().auth(secondaryApp)

监听身份验证状态更改

要订阅身份验证状态更改事件,请在 firebase().auth() 返回的 FirebaseAuth 类上调用 addAuthStateChangeListener 方法

ts
import { firebase } from '@nativescript/firebase-core';
import '@nativescript/firebase-auth';

firebase().auth()
  .addAuthStateChangeListener((user) => {
    if (!user) {
      console.log('User is currently signed out!');
    } else {
      console.log('User is signed in!');
    }
  }))

匿名登录用户

要匿名登录用户,请在 firebase().auth() 返回的 FirebaseAuth 类实例上调用 signInAnonymously 方法。

ts
import { firebase } from '@nativescript/firebase-core';
import '@nativescript/firebase-auth';

firebase()
	.auth()
	.signInAnonymously()
	.then((cred: [UserCredential]()) => {})
	.catch((error) => {});

使用电子邮件和密码创建用户帐户

注意

要使用电子邮件和密码对用户进行身份验证,请按照以下步骤在 Firebase 控制台中启用“电子邮件/密码”登录提供程序
1. 转到 Firebase 控制台。
2. 点击您的项目。
3. 在左侧边栏中,选择“身份验证”。
4. 点击“登录方法”选项卡。
5. 点击“电子邮件/密码”提供程序。
5. 打开“启用”开关。

接下来,要使用电子邮件和密码创建用户帐户,请在 FirebaseAuth 实例 (firebase().auth()) 上调用 createUserWithEmailAndPassword 方法,并将用户的电子邮件和安全密码作为参数传递。

ts
import { firebase } from '@nativescript/firebase-core';
import '@nativescript/firebase-auth';

firebase()
	.auth()
	.createUserWithEmailAndPassword('[email protected]', 'password')
	.then((cred: [UserCredential]()) => {})
	.catch((error) => {});

使用电子邮件和密码登录用户

要使用其注册的电子邮件和密码登录用户,请在 firebase().auth() 上调用 signInWithEmailAndPassword 方法,并传入电子邮件和密码。

ts
import { firebase } from '@nativescript/firebase-core';
import '@nativescript/firebase-auth';

firebase()
	.auth()
	.signInWithEmailAndPassword('[email protected]', 'password')
	.then((cred: [UserCredential]()) => {})
	.catch((error) => {});

发送用户的电子邮件验证邮件

要向用户发送电子邮件,请求他们验证其电子邮件,请在 User 对象上调用 sendEmailVerification 方法。

ts
const user = firebase().auth().currentUser

if (user && !user.emailVerified) {
  user.sendEmailVerification()
}

注销用户

要注销用户,请在 firebase().auth() 上调用 signOut 方法。

ts
firebase()
  .auth()
  .signOut()
  .then((res) => {
    if (res) {
      // user signed out
      return
    }
    // else do staff
  })

// OR

let signedOut = await firebase().auth().signOut()

使用 Apple 登录用户

Apple 宣布,任何使用第三方登录服务(例如 Facebook、Twitter、Google 等)的应用都必须具有 Apple 登录方法。Apple 登录对于 Android 设备不是必需的。

ts
import { firebase } from '@nativescript/firebase-core'
import { AppleAuthProvider } from '@nativescript/firebase-auth'
import { signIn, User } from '@nativescript/apple-sign-in'

signIn({
  scopes: ['EMAIL', 'FULLNAME'],
})
  .then((result: User) => {
    const oauthCredential = AppleAuthProvider.credential(
      result.identityToken,
      result.nonce
    )

    firebase().auth().signInWithCredential(oauthCredential)
  })
  .catch((err) => console.log('Error signing in: ' + err))

使用 Facebook 帐户登录

  • 在开始之前,请按照Facebook 开发者应用中的步骤启用 Facebook 登录并获取设置 Facebook 登录提供程序所需的 Facebook 应用 ID应用密钥

  • 按照以下步骤启用 Facebook 登录提供程序

    1. 转到Firebase 控制台
    2. 点击您的项目。
    3. 在左侧边栏中,选择“身份验证”。
    4. 点击“登录方法”选项卡。
    5. 点击 Facebook 提供程序。
    6. 打开 启用 开关
    7. 输入您的 应用 ID应用密钥,然后点击“保存”。
  • 安装 @nativescript/facebook 插件,并在 LoginManager 类上调用 logInWithPermissions 方法以从 Facabook 获取用户的凭据,然后将其传递给 Firebase。

ts
import { firebase } from '@nativescript/firebase-core'
import { FacebookAuthProvider } from '@nativescript/firebase-auth'
import { LoginManager, AccessToken } from '@nativescript/facebook'

LoginManager.logInWithPermissions(['public_profile', 'email']).then(
  (result) => {
    // Once signed in, get the users AccesToken
    const data = await AccessToken.currentAccessToken()

    // Create a Firebase credential with the AccessToken
    const facebookCredential = FacebookAuthProvider.credential(data.tokenString)

    // Sign-in the user with the credential
    return firebase().auth().signInWithCredential(facebookCredential)
  }
)

注意

如果您的用户使用 Facebook 登录,Firebase 不会将 User.emailVerified 属性设置为 true。如果您的用户使用验证电子邮件的提供程序(例如 Google 登录)登录,则它将设置为 true。

使用 Twitter 帐户登录

  • 在使用用户的 Twitter 帐户进行身份验证之前,请按照开始之前中的步骤 1-5 启用 Twitter 登录提供程序。

  • 安装 @nativescript/twitter 插件,并在 TwitterSignIn 类上调用 logIn 方法以从 Twitter 获取用户的凭据(如下所示),然后将其传递给 Firebase。

ts
import { firebase } from '@nativescript/firebase-core'
import { TwitterAuthProvider } from '@nativescript/firebase-auth'
import { Twitter, TwitterSignIn } from '@nativescript/twitter'

Twitter.init('TWITTER_CONSUMER_KEY', 'TWITTER_CONSUMER_SECRET') // called earlier in the app

// Perform the login request
TwitterSignIn.logIn().then((data) => {
  const twitterAuthCredential = TwitterAuthProvider.credential(
    data.authToken,
    data.authTokenSecret
  )

  firebase().auth().signInWithCredential(twitterAuthCredential)
})

使用 GitHub 帐户登录

  • 从您的 GitHub 开发者设置中设置 GitHub OAuth 应用,并按照开始使用 GitHub 之前中的步骤 1-5 启用 GitHub 登录提供程序。需要一个第三方库来安装 GitHub SDK 并触发身份验证流程。GithubAuthProvider 类的 credential 方法实现了这一点。

  • firebase().auth() 上调用 signInWithCredential 方法,并将 GitHub 凭据作为参数传递。

ts
import { firebase } from '@nativescript/firebase-core'
import { GithubAuthProvider } from '@nativescript/firebase-auth'
const githubAuthCredential = GithubAuthProvider.credential(token)

firebase().auth().signInWithCredential(githubAuthCredential)

使用 Google 帐户登录

使用 Firebase 进行 Google 登录时,大多数配置都已设置好。但是,您需要确保已为 Android 配置计算机的 SHA1 密钥。您可以在验证您的客户端文档上查看如何生成密钥。

  • 安装 nativescript/google-signin 插件,通过调用 configure 方法配置 Google 登录,将用户登录到其 Google 帐户以获取 ID 和访问令牌。将获取的令牌传递给 Firebase。
ts
import { firebase } from '@nativescript/firebase-core'
import { GoogleAuthProvider } from '@nativescript/firebase-auth'
import { GoogleSignin } from '@nativescript/google-signin'

GoogleSignin.configure() // called earlier in the app

GoogleSignin.signIn().then((user) => {
  const credential = GoogleAuthProvider.credential(
    user.idToken,
    user.accessToken
  )

  firebase().auth().signInWithCredential(credential)
})

电话号码身份验证

电话身份验证允许用户使用其电话作为身份验证器登录 Firebase。一条包含唯一代码的短信将发送给用户(使用提供的电话号码)。代码获授权后,用户即可登录 Firebase。

注意

最终用户为身份验证提供的电话号码将被 Google 发送和存储,以改善 Google 服务(包括但不限于 Firebase)的垃圾邮件和滥用预防。开发者应确保在使用 Firebase 身份验证电话号码登录服务之前获得适当的最终用户同意。

并非所有国家/地区都支持 Firebase 电话身份验证。有关更多信息,请参阅其常见问题解答

电话号码身份验证设置

在开始使用电话身份验证之前,请确保已完成以下步骤

  1. Firebase 控制台中启用电话作为登录方法。
  2. Android:如果您尚未在Firebase 控制台中设置应用的 SHA-1 哈希值,请执行此操作。有关查找应用的 SHA-1 哈希值的信息,请参阅验证您的客户端
  3. iOS:在 Xcode 中,启用推送通知 并确保您的 APNs 身份验证密钥已配置到 Firebase Cloud Messaging (FCM)。要查看此步骤的详细说明,请查看Firebase iOS 手机身份验证 文档。

注意:手机号码登录仅适用于真实设备和网页。要在设备模拟器上测试您的身份验证流程,请参阅测试

使用手机号码登录

在用户登录或将其帐户与 PhoneAuthCredential 关联之前,必须先验证用户的手机号码。通过使用号码调用 verifyPhoneNumber 方法来验证手机号码。号码验证后,将验证 ID 和验证码传递给 Firebase。

ts
import { PhoneAuthProvider } from '@nativescript/firebase-auth'
PhoneAuthProvider.provider()
  .verifyPhoneNumber('+44 7123 123 456')
  .then((verificationId) => {
    // present ui to allow user to enter verificationCode
    // use the verificationCode entered by the user to create PhoneAuthCredentials
    const credential = PhoneAuthProvider.provider().credential(
      verificationId,
      verificationCode
    )
    firebase().auth().signInWithCredential(credential)
  })

测试手机号码身份验证

Firebase 支持本地测试手机号码。

  • 在 Firebase 控制台中,启用“手机”身份验证提供程序,然后按照 中的步骤点击“用于测试的手机号码”下拉菜单。

  • 输入新的手机号码(例如 +44 7444 555666)和测试验证码(例如 123456)。如果向 verifyPhoneNumbersignInWithPhoneNumber 方法提供测试手机号码,则不会发送短信。您可以改为将测试验证码直接提供给 PhoneAuthProvider 或使用 signInWithPhoneNumbers 确认结果处理程序。

API

Auth 类

属性

属性类型描述
appFirebaseApp只读
currentUser用户 | null只读
languageCode布尔值只读
settingsAuthSettings只读
tenantId字符串一个只读属性,返回 Auth 类实例的租户 ID。在tenantId 中了解更多信息。

方法

方法返回值描述
useEmulator(host: string, port: number)void有关说明,请参阅 Firebase 文档中的useEmulator
applyActionCode(code: string)Promise<void>有关说明,请参阅 Firebase 文档中的applyActionCode
checkActionCode(code: string)Promise<ActionCodeInfo>有关说明,请参阅 Firebase 文档中的checkActionCode
confirmPasswordReset(code: string, newPassword: string)Promise<void>有关说明,请参阅 Firebase 文档中的confirmPasswordReset
createUserWithEmailAndPassword(email: string, password: string)Promise<UserCredential>有关说明,请参阅 Firebase 文档中的createUserWithEmailAndPassword
fetchSignInMethodsForEmail(email: string)Promise<string[]>有关说明,请参阅 Firebase 文档中的fetchSignInMethodsForEmail
isSignInWithEmailLink(emailLink: string)布尔值有关说明,请参阅 Firebase 文档中的isSignInWithEmailLink
addAuthStateChangeListener(listener: (user: User) => void)void有关说明,请参阅 Firebase 文档中的onAuthStateChanged
removeAuthStateChangeListener(listener: (user: User) => void)void
addIdTokenChangeListener(listener: (user: User) => void)void有关说明,请参阅 Firebase 文档中的onIdTokenChanged
removeIdTokenChangListener(listener: (user: User) => void)void
sendPasswordResetEmail(email: string, actionCodeSettings?: ActionCodeSettings)Promise<void>有关说明,请参阅 Firebase 文档中的sendPasswordResetEmail
sendSignInLinkToEmail(email: string, actionCodeSettings?: ActionCodeSettings)Promise<void>有关说明,请参阅 Firebase 文档中的sendSignInLinkToEmail(
signInAnonymously()Promise<UserCredential>有关说明,请参阅 Firebase 文档中的signInAnonymously
signInWithProvider(provider: OAuthProvider)Promise<UserCredential>
getProviderCredential(provider: OAuthProvider)Promise<OAuthCredential>
signInWithCredential(credential: AuthCredential)Promise<UserCredential>有关说明,请参阅 Firebase 文档中的signInWithCredential
signInWithCustomToken(customToken: string)Promise<UserCredential>有关说明,请参阅 Firebase 文档中的signInWithCustomToken
signInWithEmailAndPassword(email: string, password: string)Promise<UserCredential>有关说明,请参阅 Firebase 文档中的signInWithEmailAndPassword
signInWithEmailLink(email: string, emailLink: string)Promise<UserCredential>有关说明,请参阅 Firebase 文档中的signInWithEmailLink
signOut()布尔值注销用户。
useUserAccessGroup(userAccessGroup: string)Promise<void>
verifyPasswordResetCode(code: string)Promise<string>有关说明,请参阅 Firebase 文档中的verifyPasswordResetCode

用户

用户对象具有以下成员。

属性

属性类型描述
uid字符串只读
displayName字符串只读
anonymous布尔值只读
emailVerified布尔值只读
email字符串只读
phoneNumber字符串只读
providerId字符串只读
photoURL字符串只读
metadataUserMetadata只读`
providerDataUserInfo[]只读

方法

方法返回值描述
delete()Promise<void>有关说明,请参阅 Firebase 文档中的delete
getIdToken(forceRefresh?: undefined | false | true)Promise<string>有关说明,请参阅 Firebase 文档中的getIdToken
getIdTokenResult(forceRefresh?: undefined | false | true)Promise<AuthTokenResult>
linkWithCredential(credential: AuthCredential)Promise<UserCredential>有关说明,请参阅 Firebase 文档中的linkWithCredential
reauthenticateWithProvider(provider: OAuthProvider)Promise<UserCredential>
reauthenticateWithCredential(credential: AuthCredential)Promise<UserCredential>有关说明,请参阅 Firebase 文档中的reauthenticateWithCredential
reload()Promise<void>有关说明,请参阅 Firebase 文档中的reload
sendEmailVerification(actionCodeSettings?: ActionCodeSettings)Promise<void>有关说明,请参阅 Firebase 文档中的sendEmailVerification
unlink(providerId: string)Promise<用户>有关说明,请参阅 Firebase 文档中的unlink
updateEmail(email: string)Promise<void>有关说明,请参阅 Firebase 文档中的updateEmail
updatePassword(password: string)Promise<void>有关说明,请参阅 Firebase 文档中的updatePassword
updatePhoneNumber(credential: AuthCredential)Promise<void>有关说明,请参阅 Firebase 文档中的updatePhoneNumber
updateProfile(updates: UserProfileChangeRequest)Promise<void>有关说明,请参阅 Firebase 文档中的updateProfile
verifyBeforeUpdateEmail(email: string, actionCodeSettings?: ActionCodeSettings)Promise<void>有关说明,请参阅 Firebase 文档中的verifyBeforeUpdateEmail

UserCredential

属性类型描述
additionalUserInfo<AdditionalUserInfo>
user<用户>
credential<AuthCredential>

AdditionalUserInfo

属性类型描述
newUser布尔值
profileRecord<string, any>
providerId字符串
username字符串

AuthCredential

| 属性 | 类型 | 描述 | | -------------- | ----------------------------------------- | ----------- | ---------- | | ios | FIRAuthCredential | | _只读_ | |android |com.google.firebase.auth.AuthCredential| _只读_ | |signInMethod|字符串 | _只读_ | |idToken |字符串 | _只读_ | |accessToken |字符串 | _只读_ | |secret |字符串` | _只读_ |

OAuthCredential

属性类型描述
ios只读
android只读
signInMethod字符串
idToken字符串只读
accessToken字符串只读
secret字符串只读

许可证

Apache 许可证版本 2.0