2017-12-12 14 views
1

私は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で動作するサーバーベースのものもあります。私は、私のエンドポイントに当たるユーザーが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

ステップ1角度。ヘッダーのFirebase Auth IDトークンを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 admin SDKを使用してauthトークンを復号化します。 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/

+0

これは完璧です。ありがとう! –

関連する問題