Я создаю приложение MEAN-стека и, наконец, добираюсь до точки создания аутентификации пользователя. Для этого я последовал этому руководству: http://code.tutsplus.com/tutorials/authenticating-nodejs-applications-with-passport--cms-21619Согласование Express (Passport) и AngularJS Маршруты
Теперь, когда я включаю это в свой проект, он работает, но только частично. А именно, кажется, что единственной страницей, которую я могу правильно подойти, является домашняя страница приложения. Если я нажимаю на какие-либо ссылки или набираю что-то другое, кроме дома, в адресной строке, он возвращает меня на экран входа в систему.
Каковы возможные причины этого?
Мои маршруты/index.js файл выглядит следующим образом:
var express = require('express');
var router = express.Router();
var isAuthenticated = function (req, res, next) {
// if user is authenticated in the session, call the next() to call the next request handler
// Passport adds this method to request object. A middleware is allowed to add properties to
// request and response objects
if (req.isAuthenticated())
return next();
// if the user is not authenticated then redirect him to the login page
res.redirect('/');
}
module.exports = function(passport){
/* GET login page. */
router.get('/', function(req, res) {
// Display the Login page with any flash message, if any
res.render('index', { message: req.flash('message') });
});
/* Handle Login POST */
router.post('/login', passport.authenticate('login', {
successRedirect: '/home',
failureRedirect: '/',
failureFlash : true
}));
/* GET Registration Page */
router.get('/signup', function(req, res){
res.render('register',{message: req.flash('message')});
});
/* Handle Registration POST */
router.post('/signup', passport.authenticate('signup', {
successRedirect: '/home',
failureRedirect: '/signup',
failureFlash : true
}));
/* GET Home Page */
router.get('/home', isAuthenticated, function(req, res){
res.render('home', { user: req.user });
});
/* Handle Logout */
router.get('/signout', function(req, res) {
req.logout();
res.redirect('/');
});
return router;
}
У меня также есть некоторые AngularJS маршруты, указанные в другом файле (приложение работало отлично с ними, прежде чем я начал добавлять аутентификации).
app.config(['$routeProvider', function($routeProvider){
$routeProvider
.when('/', {
templateUrl: 'partials/home.html',
controller: 'HomeCtrl'
})
.when('/calendar',{
templateUrl: 'partials/calendar.html',
//controller: 'Calendar'
})
.when('/add-activity', {
templateUrl: 'partials/activity-form.html',
controller: 'AddActivityCtrl'
})
.when('/activity/:id',{
templateUrl: 'partials/activity-form.html',
controller: 'EditActivityCtrl'
})
.when('/activity/delete/:id', {
templateUrl: 'partials/activity-delete.html',
controller: 'DeleteActivityCtrl'
})
.otherwise({
redirectTo: '/'
});
}]);
Есть ли что-то, что мне не хватает?
P.S. Я заметил, что в настоящее время мой URL домашней странице
тогда как ранее это было
Я добавил "дом", чтобы отличать от «/ ", который является страницей аутентификации; однако я не уверен, как «#» привязано к пути в первой цитате.
Я бы переместить 'уаг isAuthenticated' под' module.exports = функция (паспорт) { ', как я не уверен, если паспорт существует в этом контексте. Если это не помогло, запустите комментирование 'res.redirect ('/')' и 'redirectTo: '/'', чтобы понять, в чем причина. – faster
@faster, просто чтобы убедиться, что я правильно понимаю, что мне делать с комментариями перенаправления? – MadPhysicist
Просто, чтобы понять, какой из них работал. – faster