2017-11-17 5 views
0

これは認証シーケンスの質問です。私は現在、私のメインのウェブサイトと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を生成します。代わりに新しい場所?

ヘルプを評価してください。

答えて

0

expressでは、serve-staticを使用して、/*ルートよりも優先する静的ファイルを処理できます。詳細はhttps://expressjs.com/en/starter/static-files.htmlを参照してください。

注:これはあなたの静的な資産が(彼らは通常ない)の認証を必要としない前提としています。

app.use(express.static('public')) 

注:これは、それがも優先を取るようにするために/*ルートを宣言ブロックを超えるべきです。

ファイルが/publicフォルダにある場合は、エクスプレスサーバのルートに配置されます。

+0

スタティックアセットは私には認証を必要としません。本当にその洞察力を感謝し、静的な配送を完全に忘れてしまった。ただし、デフォルトのAngular 2ファイルは常にルートからロードされます。何とかこれを変えることができますか、それとも石に設定されていますか? – ytpillai

+0

「常にrootからロードする」とはどういう意味ですか?私はAngularをあまりよく知らない。 –

+0

これは角度に関する関連クエリですが、AngularがTypeScriptをjavascriptファイルにコンパイルすると、index.htmlにスクリプトタグが自動的に追加され、 "/ assets /"の代わりに "/"からファイルが読み込まれます。私はそれを変えようとしていました。 – ytpillai

関連する問題