首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AngularFire2中的链接帐户

AngularFire2中的链接帐户
EN

Stack Overflow用户
提问于 2016-12-11 14:56:55
回答 4查看 1.4K关注 0票数 2

我正在使用AngularFire2处理匿名帐户和谷歌帐户。如果用户使用Google帐户登录,我希望将他们的匿名帐户转换为他们的永久(Google)帐户,这样他们就可以继续无缝地使用该应用程序。

使用Firebase似乎很容易,但我看不到在AngularFire2中这样做的能力。

对于Firebase,您将获得新的auth提供程序的AuthCredential,然后使用链接方法转换帐户:

代码语言:javascript
复制
var credential = firebase.auth.GoogleAuthProvider.credential(
  googleUser.getAuthResponse().id_token);

auth.currentUser.link(credential).then(function(user) {
  console.log("Anonymous account successfully upgraded", user);
}, function(error) {
  console.log("Error upgrading anonymous account", error);
});

这在AngularFire2中是可能的吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-12-12 06:33:53

您没有理由不能使用基础Firebase,因为由应用程序创建的Firebase AngularFire2可以用于注入。

您可以使用注入的应用程序访问auth() (或storage())实例中没有被AngularFire2公开的任何方法。

对于一个示例,您可以将其插入到一个应用程序组件中,如下所示:

代码语言:javascript
复制
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命名空间中(而不是app实例)。此外,由于AngularFire2在FirebaseAuthState的(名称混乱的) auth属性中提供了当前用户,因此您不需要注入应用实例就可以对Google执行您想要做的事情。您只需要firebase导入:

代码语言:javascript
复制
this.angularFire.auth.login({
  email: "some@address.com",
  password: "password",
})
.then((authState: FirebaseAuthState) => {
  authState.auth.linkWithRedirect(new firebase.auth.GoogleAuthProvider());
});
票数 3
EN

Stack Overflow用户

发布于 2017-07-12 14:19:23

AngularFire2 v4中的完整示例。它将一个匿名用户升级到Google提供者,保持相同的auth。

代码语言:javascript
复制
import { Component, OnInit } from '@angular/core';
import { AngularFireAuth } from 'angularfire2/auth';
import * as firebase from 'firebase/app';
import { Observable } from 'rxjs/Observable';

@Component({
  selector: 'app-user',
  templateUrl: './user.component.html',
  styleUrls: ['./user.component.scss']
})
export class UserComponent implements OnInit {

  user: Observable<firebase.User>;

  constructor(private afAuth: AngularFireAuth) { }

  ngOnInit() {
    this.user = this.afAuth.authState;
  }

  anonymousLogin() {
    return this.afAuth.auth.signInAnonymously()
  }

  anonymousUpgrade() {
    const provider = new firebase.auth.GoogleAuthProvider()
    firebase.auth().currentUser.linkWithPopup(provider)
  }


}
票数 1
EN

Stack Overflow用户

发布于 2017-01-06 20:35:36

这是一个有用的例子;

代码语言:javascript
复制
import * as firebase from 'firebase':


upgradeAnonymous() {

    let credential = new firebase.auth.GoogleAuthProvider();

    firebase.auth().currentUser.linkWithPopup(credential).then(function(user) {
       console.log("Anonymous account successfully upgraded", user);
      }, function(error) {
        console.log("Error upgrading anonymous account", error);
      })
} 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41087494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档