@nativescript/firebase-auth
NativeScript Firebase - Auth
npm i --save @nativescript/firebase-auth

@nativescript/firebase-auth

简介

一个插件,允许您将 Firebase 认证 添加到您的 NativeScript 应用程序。

image

注意:请使用 @nativescript/firebase-core 插件与该插件一起使用,以在您的应用程序中初始化 Firebase。

安装

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

npm install @nativescript/firebase-auth

使用 @nativescript/firebase-auth

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

要创建一个新的 Firebase Auth 实例,请按如下方式在 Firebase 实例上调用 auth 方法

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

const auth = firebase().auth();

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

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 方法

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 方法。

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

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

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

注意 要使用电子邮件和密码认证用户,请按照以下步骤在 Firebase 控制台中启用 Email/Password 登录提供程序
1. 访问 Firebase 控制台。
2. 点击您的项目。
3. 在左侧边栏中,选择 Authentication
4. 点击 Sign-in method 选项卡。
5. 点击 Email\password 提供程序。
5. 打开 Enable 开关。

接下来,要使用电子邮件和密码创建用户账户,请调用 FirebaseAuth 实例(firebase().auth())上的 createUserWithEmailAndPassword 方法,传入用户的电子邮件和安全的密码。

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

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

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

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

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

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

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

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

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

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

登出用户

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

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 Sign-In 方法。对于 Android 设备不需要 Apple Sign-In。

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 App IDApp secret

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

    1. 转到Firebase控制台
    2. 点击你的项目。
    3. 在左侧边栏中,选择身份验证
    4. 点击登录方法选项卡。
    5. 点击Facebook提供者。
    6. 开启启用
    7. 输入你的App IDApp secret,然后点击保存
  • 安装插件@nativescript/facebook,并在LoginManager类上调用logInWithPermissions方法以获取Facebook的凭证并将其传递给Firebase。

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,如下所示。

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凭证。

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

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

使用 Google 账户登录

在使用Firebase与Google Sign-In时,大多数配置已经设置好。但是,您需要确保您的机器的SHA1密钥已配置为与Android一起使用。您可以在认证您的客户端文档中查看如何生成密钥。

  • 安装插件nativescript/google-signin,通过调用configure方法配置Google Sign-in,使用户登录Google账户以获取ID和访问令牌。将获得的令牌传递给Firebase。
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云消息(FCM)配置。要查看此步骤的详细说明,请查看Firebase iOS手机认证文档。

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

使用手机号码登录用户

用户手机号必须首先通过调用带有号码的verifyPhoneNumber方法进行验证,然后用户才能登录或使用PhoneAuthCredential将账户与手机号链接。通过将验证ID和代码传递给Firebase来验证手机号。

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

认证类

属性

属性 类型 描述
app FirebaseApp 只读
currentUser 用户 | null 只读
languageCode 布尔值 只读
settings AuthSettings 只读
tenantId 字符串 这是一个只读属性,它返回Auth类实例的租户ID。有关更多信息,请参阅tenantId

方法

方法 返回 描述
useEmulator(host: string, port: number) void 有关说明,请参阅Firebase文档中的useEmulator
applyActionCode(code: string) Promise 有关说明,请参阅Firebase文档中的applyActionCode
checkActionCode(code: string) Promise 有关说明,请参阅Firebase文档中的checkActionCode
confirmPasswordReset(code: string, newPassword: string) Promise 有关说明,请参阅Firebase文档中的confirmPasswordReset
createUserWithEmailAndPassword(email: string, password: string) Promise 有关说明,请参阅Firebase文档中的createUserWithEmailAndPassword
fetchSignInMethodsForEmail(email: string) Promise 有关说明,请参阅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 关于描述,请参阅Firebase文档中的sendPasswordResetEmail
sendSignInLinkToEmail(email: string, actionCodeSettings?: ActionCodeSettings) Promise 关于描述,请参阅Firebase文档中的sendSignInLinkToEmail
signInAnonymously() Promise 关于描述,请参阅Firebase文档中的signInAnonymously
signInWithProvider(provider: OAuthProvider) Promise
getProviderCredential(provider: OAuthProvider) Promise<OAuthCredential>
signInWithCredential(credential: AuthCredential) Promise 关于描述,请参阅Firebase文档中的signInWithCredential
signInWithCustomToken(customToken: string) Promise 关于描述,请参阅Firebase文档中的signInWithCustomToken
signInWithEmailAndPassword(email: string, password: string) Promise 关于描述,请参阅Firebase文档中的signInWithEmailAndPassword
signInWithEmailLink(email: string, emailLink: string) Promise 关于描述,请参阅Firebase文档中的signInWithEmailLink
signOut() 布尔值 登出用户。
useUserAccessGroup(userAccessGroup: string) Promise
verifyPasswordResetCode(code: string) Promise<string> 关于描述,请参阅Firebase文档中的verifyPasswordResetCode

用户

用户对象具有以下成员。

属性

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

方法

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

用户凭证

属性 类型 描述
additionalUserInfo <附加用户信息>
用户 <用户>
凭证 <认证凭证>

附加用户信息

属性 类型 描述
新用户 布尔值
个人资料 Record
providerId 字符串
用户名 字符串

认证凭证

属性 类型 描述
ios FIRAuthCredential `
android com.google.firebase.auth.AuthCredential 只读
登录方法 字符串 只读
idToken 字符串 只读
accessToken 字符串 只读
密钥 字符串 只读

OAuth凭证

属性 类型 描述
ios 只读
android 只读
登录方法 字符串
idToken 字符串 只读
accessToken 字符串 只读
密钥 字符串 只读

许可证

Apache License Version 2.0