これは認証シーケンスの質問です。私は現在、私のメインのウェブサイトとAPIポイントの両方のルーティングを管理するExpressのバックエンドでホストされているウェブサイトを持っています。いずれのルートについても、リクエストにはウェブサイトのOAuthトークンが掲示されている必要があります。これは特定のGMailアカウントに対応しています。ExpressとAngular 2を使用してシーケンスを認証する方法
私は(認証機能が実行されていないが、これは問題ではありません)私のウェブサイトにアクセスすることを許可するには、このトークン/対応する電子メールをチェックする機能を持っています。
function validateUser(token) {
return new Promise(
(resolve, reject) => {
if (!token)
reject("Empty token");
request(
'https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=' + token,
(error, response, body) => {
console.log(body);
if (error) {
return reject("Error");
} else if (JSON.parse(body)['error_description']) {
return reject(JSON.parse(body)['error_description']);
} else if (body) {
let theDict = JSON.parse(body);
theDict['oauth_token'] = token;
return resolve(theDict);
}
return reject("some other error");
}
);
}
);
}
それから私は(そして、ログインページにリダイレクトして、ユーザーがコンテンツを取得するためにトークンのルートへのポストに記録された後)の任意の場所での要求を取得する管理し、ルートを持っています。今
router.post(
'/*',
(req, res, next) => {
var token = req.body['token'];
validateUser(token).then(
(data) => {
request(
'http://localhost:4200',
(err, remoteResponse, remoteBody) => {
if (err) {
return res.status(500).end('Error');
}
res.send(remoteBody);
}
);
},
(err) => {
res.redirect('/login');
}
);
}
);
、ここでの問題は次のように、私は(バックのdevのサーバーへのリバースプロキシ)私のサイトのメインページに移動するたびにindex.htmlファイルをロードすると、正常に動作します、ですが、明らかに他のすべてのロード"/ assets/js"またはデフォルトのAngular 2ファイルは、同様に認証されていないため動作しません。
同じ認証方法を使用してこれらの要求を送信するために角度2の方法はありますか? index.htmlがロードされると、oauthトークンがAngular 2アプリケーションに格納されているので、何とか使うことができますか?
また、Expressから別のAPIルートを設定してそこからファイルをロードすることもできますが、Angular 2ではvendor.jsやその他のファイルを読み込むためのスクリプトタグを追加してindex.htmlを生成します。代わりに新しい場所?
ヘルプを評価してください。
スタティックアセットは私には認証を必要としません。本当にその洞察力を感謝し、静的な配送を完全に忘れてしまった。ただし、デフォルトのAngular 2ファイルは常にルートからロードされます。何とかこれを変えることができますか、それとも石に設定されていますか? – ytpillai
「常にrootからロードする」とはどういう意味ですか?私はAngularをあまりよく知らない。 –
これは角度に関する関連クエリですが、AngularがTypeScriptをjavascriptファイルにコンパイルすると、index.htmlにスクリプトタグが自動的に追加され、 "/ assets /"の代わりに "/"からファイルが読み込まれます。私はそれを変えようとしていました。 – ytpillai