如何在服务器上使用firebase对用户进行身份验证时对用户进行身份验证?

时间:2017-12-12 14:51:11

标签: firebase firebase-authentication

我有一个角度应用程序,它使用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
    });
  }

}

我还在node.js中使用express运行一些基于服务器的东西。我想尝试验证用户点击我的端点的用户是否已经通过firebase对我的应用进行了身份验证。我可以这样做吗?

我希望有一个类似于此的路由处理程序:

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'});
    }
};

如何从快递路由处理程序中告知我的用户已登录到我的应用程序?

1 个答案:

答案 0 :(得分:3)

第1步角度。将标题中的Firebase Auth ID令牌从angular发送到您的express端点。

 postRequest() {
    const url = 'https://your-endpoint';
    firebase.auth().currentUser.getIdToken()
            .then(authToken => {
              const headers = new Headers({'Authorization': 'Bearer ' + authToken });
              return this.http.post(url, { someData } , { headers }).toPromise()
            })
    }

步骤2节点。使用Firebase管理SDK解密身份验证令牌。 verifyIdToken验证Firebase ID令牌(JWT)。如果令牌有效,则使用令牌的已解码声明来履行承诺;否则,承诺被拒绝。

const admin = require('firebase-admin');
admin.initializeApp(yourConfig);
const express = require('express')
const app = express()

app.post('/your-endpoint', (req, res) => {

  const token = req.headers.authorization.split('Bearer ')[1]

  return admin.auth().verifyIdToken(token)
              .then(decodedToken => {
                  const uid = decodedToken.uid;
                  res.status(200).send('Looks good!')

              })
              .catch(err => res.status(403).send('Unauthorized'))


});

来源:

https://jwt.io/

https://firebase.google.com/docs/auth/admin/verify-id-tokens https://angularfirebase.com/lessons/secure-firebase-cloud-functions/