應該沒有理由不能使用底層的Firebase API,因爲由AngularFire2創建的Firebase App可用於注入。
您可以使用注入的應用程序訪問未由AngularFire2公開的auth()
(或storage()
)實例的任何方法。
舉一個例子的目的,你可以把它注射到一個應用程序組件是這樣的:
import { Component, Inject } from "@angular/core";
import { AngularFire, FirebaseApp } from "angularfire2";
import * as firebase from "firebase";
@Component({
selector: "app",
template: ...
})
export class AppComponent {
constructor(
// Inject AngularFire2:
private angularFire: AngularFire,
// Inject the Firebase App instance:
@Inject(FirebaseApp) private firebaseApp: firebase.app.App
) {
// Perform some sort of login.
...
angularFire.auth.subscribe((state) => {
// AngularFire2's auth observable will emit when the authentication
// state changes and if the state is non-null, there will be a
// current user. At this point, you should be able to do with the
// injected app what it was you were doing with the SDK.
if (state) {
var credential = firebase.auth
.GoogleAuthProvider
.credential(googleUser.getAuthResponse().id_token);
firebaseApp.auth()
.currentUser
.link(credential)
.then((user) => {
console.log("Anonymous account successfully upgraded", user);
})
.catch((error) => {
console.log("Error upgrading anonymous account", error);
});
}
});
}
}
您不必使用auth
觀察的;您還可以使用AngularFire2的auth.login
方法返回的承諾將代碼放入承諾鏈中。
正如以下評論所述,GoogleAuthProvider
類位於firebase.app
命名空間(不是應用程序實例)中。另外,由於當前用戶可以通過FirebaseAuthState
(易混淆命名)的auth
屬性中的AngularFire2提供,因此您無需注入應用實例即可執行您想要對Google提供商執行的操作。您只需要輸入firebase
:
this.angularFire.auth.login({
email: "[email protected]",
password: "password",
})
.then((authState: FirebaseAuthState) => {
authState.auth.linkWithRedirect(new firebase.auth.GoogleAuthProvider());
});
它看起來不像您可以從應用程序的身份驗證服務訪問GoogleAuthProvider類。 – DenimChicken
它看起來像我混淆了一個名稱空間的實例。嘗試'firebase.auth.GoogleAuthProvider' - 其中'firebase'是示例中導入的命名空間。 (如果解決了這個問題,我會重寫答案,因爲不需要注入'FirebaseApp')。 – cartant
我能夠像這樣升級一個帳戶:'this.firebaseApp.auth()。 currentUser.linkWithRedirect(new firebase.auth.GoogleAuthProvider());'感謝您指點我正確的方向! – DenimChicken