当服务器上的用户已经在客户端上进行身份验证时,如何使用firebase对其进行身份验证?

当服务器上的用户已经在客户端上进行身份验证时,如何使用firebase对其进行身份验证?,firebase,firebase-authentication,Firebase,Firebase Authentication,我有一个angular应用程序,它使用firebase对客户端上的用户进行身份验证。这似乎工作正常 export class AuthService { user$: Observable<firebase.User>; constructor(private af_auth: AngularFireAuth) { this.user$ = this.af_auth.authState; this.user$.subscribe(user => {

我有一个angular应用程序,它使用firebase对客户端上的用户进行身份验证。这似乎工作正常

export class AuthService {
  user$: Observable<firebase.User>;

  constructor(private af_auth: AngularFireAuth) {
    this.user$ = this.af_auth.authState;
    this.user$.subscribe(user => {
      // do something with the firebase user
    });
  }

}

如何从express route handler中判断我的用户已登录到我的应用程序?

步骤1。将标头中的Firebase Auth ID令牌从angular发送到express端点

postRequest(){
常量url=https://your-endpoint';
firebase.auth().currentUser.getIdToken()
。然后(authToken=>{
const headers=新的头({'Authorization':'Bearer'+authToken});
返回this.http.post(url,{someData},{headers}).toPromise()
})
}
步骤2节点。使用Firebase admin SDK解密身份验证令牌<代码>验证ID令牌验证Firebase ID令牌(JWT)。如果令牌有效,则通过令牌的解码声明来履行承诺;否则,承诺将被拒绝

const admin=require('firebase-admin');
管理员初始化app(yourConfig);
const express=require('express')
const app=express()
app.post('/your endpoint',(req,res)=>{
const token=req.headers.authorization.split('Bearer')[1]
返回admin.auth().verifyIdToken(令牌)
。然后(decodedToken=>{
const uid=decodedToken.uid;
res.status(200).send('Looks good!')
})
.catch(err=>res.status(403).send('Unauthorized'))
});
资料来源:


这太完美了。谢谢
var firebase_app = firebase.initializeApp(firebase_config); 

auth.isAuthenticated = function (req, res, next) {

    // I had seen a suggestion to do the following, but currentUser is always null here.
    var user = firebase_app.auth().currentUser;

    if (user !== null) {
        // Authenticated with my app?
        req.auth_user = user;
        next();
    } else {
        res.status(401).send({error: 'Nope'});
    }
};