2017-08-14 4 views
0

私たちは、データベース内の特定のユーザー専用に作成されたアプリケーションをビルドしています。アプリは誰にもアクセスできないようにする必要があります。サーブユーザーが認証されている場合のエクスプレス付き角度アプリ

私たちの考えは、私たちが持っているアプリに関するいくつかの情報とともに、単純なHTMLファイルを提供することです。アプリのバックエンドはnodejsでなければならず、ユーザーが認証APIから提供され、ドメインに添付されたCookieを持っているかどうかを確認する必要があります。ユーザーがCookieを持っている場合は、そのユーザーにアプリケーションフォルダを提供する必要があります。

認証されていない場合は、jsファイルとそのア​​プリケーションに属するすべてのファイルを一般から保護したいと考えています。

単純なHTMLファイルでは、基本的には「私は認証されており、アプリケーションを閲覧させてください」というボタンがあります。

<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Landing page</title> 
</head> 
<body> 
    <h1>Landing page app!!!</h1> 
    <input onclick="location.href='/app';" type="submit" 
    value="I'm authenticated, let me browse the app!"/> 
</body> 
</html> 

ノードサーバーには/appというルートがあります。

const express = require('express'); 
const app = express(); 
const port = process.env.PORT || 9090; 
const fs = require('fs'); 

app.use(express.static('public')); //only contains index.html 

app.listen(port, (err) => { 
    if (err) { 
    console.log(err); 
    } 
}); 

app.get('/app', (req, res) => { 
    if(req.user.isAuthenticated){ 
     //Psuedo code below 
     res.send(WholeAngularAppToUser()); 
    } 
    else{ 
     // User should stay on landing page 
     // with information about that they are not authenticated 
    } 
}); 

角度アプリ全体をユーザーに送信するにはどうすればよいですか?

答えて

1

「認証されました」ボタンが認証プロセス中に(資格情報も送信するなど)何らかの目的を果たしていない限り、おそらくそれを取り除き、直接アプリケーションにアクセスする必要があります。あなたには、いくつかのミドルウェアにより保護の静的ルートとして設定する必要がありますので、角度のアプリは、多くの場合、静的ファイルとして提供しています:

もちろん
app.use('/app', function(req, res, next) { 
    if (req.user.isAuthenticated) { 
    next() 
    } else { 
    res.sendFile(path.join(__dirname, 'public/index.html')) 
    } 
}) 
app.use('/app', express.static('/app'); 

、あなただけ受け入れられないだろういくつかのユーザーとしての要求にフラグを「にisAuthenticated」ミドルウェアをもう少し安全に交換するために認証されています。

+0

はい!これに加えて、/にアクセスするときに同じindex.htmlファイルを提供する必要があります。それはどのように達成されますか? – petur

+1

別のルートを設定してください。今回は '/'のパスを指定して、そこからインデックスファイルを提供してください。異なるルートで同じファイルを処理できます。ファイル名を指定しない場合は、ファイル名を指定してください。 'app.get( '/'、function(req、res){res.sendFile(path.join(__ dirname、 'public/index.html'))})' –

関連する問題