2017-04-21 12 views
0

私は簡単な認証システムを作成しました。ユーザはユーザ名を送信し、ルートはユーザがデータベースに存在するかどうかをチェックし、そうであれば署名されたクッキーが他のすべてのルートにアクセスするためにユーザに割り当てられます。このシステムは他のすべてのルートを保護するために機能します。しかし、サーバがインデックスファイルを最終的な角度経路を保護することに問題があるようです。ExpressJsで保護されていないファイルをスキップする/

アングルファイルを提供するapp.use()以前は、ユーザークッキーがないとログインページにリダイレクトするミドルウェアを配置しました。問題は、適切なユーザークッキーを使わずにlocalhost:3000にアクセスして、角度アプリに直接送信されますが、APIルートの保護が適切に行われているためです。あなたがcookieなしでlocalhost:3000/randomwordsに行くと、あなたはユーザログインページに送られます。私のアプリケーションフローには、私が紛失しているものがあるようです。

クッキーを持たないユーザーは常に認証ページに送られ、そこからログインできるように、どのように私は正しく、角度のルートを保護します。

も私も、角度のルートを削除して保存したアプリを再起動し、それはまだ、角度のアプリを提供していました。そんなことがあるものか??!

ログインがこの問題に遭遇するかもしれない人のためだから、ポスト要求

module.exports.submitLoginForm = function(req,res, next){ 

    let foundUser = User.findOne({'userName': userName}); 

    foundUser 
     .then(user=>{ 

     if(tester){ 
      res.cookie('user', user._id, {signed: true}) 
      res.redirect('/'); 
     } 
      res.redirect('/auth/'); 
     }) 
     .catch(error=>{ 
      console.log(error) 
    }); 
} 

app.js

//how all other routes are protect in app.js (This works!) 

authMiddleWare = function(req,res,next){ 
    if (req.signedCookies['user']) { 
     next(); 

    } else { 
     sendJSONresponse(res, 400, {err:"error"}) 
    } 
} 

app.use('/api/info', authMiddleWare,infoApi); 


//middleware and angular route 

app.use(function(req, res, next) { 

    if (req.signedCookies['user']) { 
     next() 

    } else { 
     res.redirect('/auth/'); 
    } 

}); 

app.use(function (req, res, next) { 

     res.sendFile(path.join(__dirname, 'public/dist', 'index.html')); 
}); 

答えて

0

を提出します。遠くapp.jsファイルに上記の私は、静的なファイルを提供するために、標準

app.use(express.static(path.join(__dirname, 'public')));

を使用しました。なんらかの理由で、これは何に関係なく、エクスプレスでAngularアプリのindex.htmlファイルを提供します。私はそれを認証ミドルウェアの下に移動し、今は動作します!

app.use(function(req, res, next) { 

    if (req.session.user) { 
     next() 

    } else { 
     res.redirect('/auth/'); 
    } 

}); 

app.use(express.static(path.join(__dirname, 'server/public/dist'))); 

app.use(function(req, res) { 
    res.sendFile(path.join(__dirname, 'server/public/dist', 'index.html')); 
}); 
関連する問題