当服务器上的用户已经在客户端上进行身份验证时,如何使用firebase对其进行身份验证?
我有一个angular应用程序,它使用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 => {
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'});
}
};