ExpressJS + AngularJS の実験を始めていますが、ストレスの多い状況に遭遇しました。
私の目標は、1 つのログイン ページと 1 つのダッシュボード ページを用意することです。Passport + MongoDB を使用してユーザーを認証し、資格情報が正しい場合は、ダッシュボード ページにリダイレクトします。
angular-express-seedから始めて修正したので、前述のビューになりました。
$routeProvider.
when('/login', {
templateUrl: 'partials/login',
controller: 'LoginCtrl'
}).
when('/dashboard', {
templateUrl: 'partials/dashboard',
controller: 'DashboardCtrl'
}).
otherwise({
redirectTo: '/login'
});
私は各部分ビューを次のように提供しています:
app.get('/partials/:name', routes.partials);
exports.partials = function (req, res) {
var name = req.params.name;
res.render('partials/' + name);
};
ログイン システムは、ダッシュボードに直接アクセスできる部分を除いて (まったくログインせずに) 正しく機能しています。
そのため、ダッシュボード (またはその他の領域) へのアクセスを許可する前に、ユーザーが認証されているかどうかを確認する必要があると思います。
トリックを行うこれを見つけました:
function ensureAuthenticated(req, res, next) {
if (req.isAuthenticated()) { return next(); }
res.redirect('/login');
}
GET
そして、私はそれを部分的に呼び出します
app.get('/partials/:name', ensureAuthenticated, routes.partials);
ensureAuthenticated
ここでの大きな問題は、ログイン ビューも部分的であり、それが要求されているビューであるときに実行したくないことです。
現在、部分的なリクエストごとに呼び出すとensureAuthenticated
、ブラウザがクラッシュしますが、エラーは発生しません。
私がこれまでに試したこと(そしてうまくいかなかった):
function ensureAuthenticated(req, res, next) {
if ( req.route.params.name !== 'login' && req.isAuthenticated() ) { return next(); }
res.redirect('/login');
}
app.GET
また、使用せずに独自のログインビューを呼び出してみましensureAuthenticated
たが、どういうわけかAngularがオフになり、ロードすらしません。
これを解決する方法についてのアイデアはありますか?
前もって感謝します。