ExpressJS + AngularJS를 실험하기 시작했으며 스트레스가 많은 상황에 처했습니다.하나만 제외하고 모든 경로에 대한 액세스 제한
내 목표는 로그인 페이지와 대시 보드 페이지를 하나씩 사용하고 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');
}
내가 여기에 일부
app.get('/partials/:name', ensureAuthenticated, routes.partials);
큰 문제로 모든 GET
에 부를 것이다는 로그인보기도 부분이라는 것이다 :
ensureAuthenticated
이 실행되는 것을 원하지 않습니다.
현재 부분 요청마다 ensureAuthenticated
을 호출하면 브라우저가 충돌하고 오류는 없습니다.
function ensureAuthenticated(req, res, next) {
if (req.route.params.name !== 'login' && req.isAuthenticated()) { return next(); }
res.redirect('/login');
}
또한 ensureAuthenticated
를 사용 app.GET
아니라 자신에 로그인보기를 호출 시도했지만 어떻게 든 각도는 오프 화나게하지조차 않는 : 내가 지금까지 시도했습니다 (그리고 작동하지 않았다) 어떤
하중.
해결 방법에 대한 아이디어가 있으십니까?
미리 감사드립니다.
app.get ('/ partials/login', routes.partials)을 추가하십시오. 이름 매개 변수 검사가 작동하도록합니다. 그래도 문제가 생기면 로그인하고 대시 보드로 이동 한 다음 세션 쿠키를 정리하고 새로 고침하여/login으로 리디렉션되는지 확인합니다. 그것은 로그인보기를 보여 주지만 URL은 여전히 on/dashboard를 말합니다. 그 이유는 무엇입니까? – mfreitas
그래, 내/로그인 핸들러에서 반환했기 때문에 로그인보기가 표시됩니다. res.redirect ('/ login')하지 않아야합니다. 리디렉션? 대신 내 app.get ('/ login', routes.login); 반환 res.render ('부분/로그인'); – mfreitas
@mfreitas Angular가 부분을 요청하기 때문에 AJAX 호출 중에 리디렉션이 전송됩니다. 따라서 AJAX 호출은 기본 페이지 URL이 아니라 리디렉션됩니다. – robertklep