import { AngularFireAuth } from '@angular/fire/auth';
import 'firebase/auth';
export class AuthenticationService {
constructor(private auth: AngularFireAuth) { }
getCurrentUser(){
this.auth.onAuthStateChanged((user) => {
if (user) {
// User is signed in.
user.getIdTokenResult()
.then((idTokenResult) => {
let currentProvider = idTokenResult.signInProvider;
// The result will look like 'google.com', 'facebook.com', ...
});
} else {
// No user is signed in.
}
});
}
}
4条答案
按热度按时间new9mtju1#
正如链接的答案和Hareesh所说,由于一个用户可以登录到多个提供者,因此您需要遍历
providerData
数组。有关工作示例,请参阅:https://jsbin.com/vuzafuq/edit?html,js,output(检查JavaScript控制台中的实际提供程序)
wbgh16ku2#
我尝试了多个提供商。
如果你想得到所有已经登录的提供者用户,你可以使用
user.providerData
。但是providerData的顺序并不是基于Swift SDK声明的用户登录时间的降序。这不适用于Javascript SDK。
如果要获取当前提供者,可以解码包含当前登录提供者
sign_in_provider
的idToken。格式如下所示
您可以尝试通过https://jwt.io/解码或使用npm包
jsonwebtoken
解码。在firebase
7.15.0
上测试,希望这对你有用。yqhsw0fo3#
Firebase在用户对象内提供当前登录的提供者信息,如下所示(我在下面的示例中使用了AngularFire框架库)。
对于web平台,请参考以下代码:
有关详细信息,请查看官方文档here。
ncecgwcz4#
2022答案(Firebase v8)
我一直在寻找一个简单的小JS snippit,但没有找到。也许这会帮助你: