2016-08-09 10 views
0

私のアプリはフロントエンドにAngular2を使用しています.Expressを実行する別の(クロスドメイン)バックエンドサーバーとGoogle Oauth認証にpassport.jsを使用しています。クライアント側でPassport.jsのユーザー情報を読むにはどうすればよいですか?

Passport(google oauth経由)を使用してユーザーがサーバーから認証されると、ユーザーデータはデータベースから読み込まれ、資格情報に含まれます。これらのユーザーデータは、使用が承認されたバックエンドAPIルートを判断するために使用されます。 (これはscotch.ioのチュートリアルで、誰もが見ていると確信しています)

フロントエンドでこのユーザーオブジェクトにアクセスして、ユーザーのアクセスに依存するルートガードを有効にしますレベル(サーバー上のユーザーオブジェクトで定義されています)。

この質問から、正常である、データがJWTを経由して送信され、ちょうど、変更フロントエンドに読み取れないようです:https://www.reddit.com/r/Angular2/comments/4ud0ac/ng2_secure_connection_front_to_back/

私がアクセスし、クライアントにそのトークンを読むにはどうすればよいですか?私が見つけることができるのは、expressで設定された 'connect.sid'セッションクッキーだけです。 Cookieのペイロードは、標準のJWTには適合しません。

答えて

0

チュートリアルに従った場合は、おそらくJWTではなくCookieベースのセッションを使用しています。クッキーには、サーバーがセッションストアからセッションを識別するために使用するセッションIDのみが含まれています。この情報を使用すると、おそらくdeserializeUserのデータベースから何かを掘り起こすことになります。これは、バックエンドのreq.userで利用できます。

もちろん、すべてのリクエストのレスポンスにユーザーデータを追加することはできますが、実際にはすべてのレスポンスでユーザーオブジェクトを送信するCookieベースのセッションを使用している場合はほとんど意味がありません。例えば、あなたができます。 req.userの関連部分を返すルートを追加してください:

app.get('/users', function(req, res) { 
    res.json({ username : req.user.username }); 
); 
+0

私は今それを得ると思います。 Expressは、クッキーとしてクライアント上で一意のID(セッション)を設定しています。クライアントが要求と共に資格情報を送信すると、そのクッキーの文字列が送信され、そのユーザーの詳細が、私がそれらと作業できるサーバー上のreqオブジェクトに追加されます。ユーザーの詳細は、サーバーからクライアントに実際に転送されることはありません。 私はそれが元々どのように働いていたか完全に誤解しました。私はJWTでPassport.jsを実装する方法を調べる必要があります。 ありがとう、ちょうど私が必要なもの! – ShannonB