Passportjs и expressjs

Здравствуйте! Есть такая схема mongoose:

var mongoose = require(‘mongoose’);
module.exports = mongoose.model(‘Admin’,{
username: String,
password: String,
role: { type: String, default: “user” },
soft_token: { type: String, default: 0 }
});

Как с помощью passportjs запретить доступ к странице в зависимости от того кто пользователь, admin или user.

как-то так

module.exports = function(app) {
    app.get('/your-page', isAuthenticated, function(req, res) {});
};

function isAuthenticated(req, res, next) {
     if (!req.session.user) {
        return next(new HttpError(401, "Вы не авторизованы"));
    }
   next();
} 

см. детальней здесь. Если не ответил - напиши вопрос еще раз.

Спасибо за ответ. Эта функция у меня реализована. Если user аутентифицирован пропустить если нет ошибка.
А мне нужно: если role: admin то его пускало, а если role: user то не пускало. То есть страница доступна только админу.

Я давно не брал в руки этот стек, но общее направление могу подсказать.

Тебе надо, используя уникальную характеристику пользователя из объекта req.session.user сделать запрос в монгу http://mongoosejs.com/docs/queries.html за документом, описывающим пользоватея и проверить его роль. Похоже, что поле id есть в объекте user http://passportjs.org/docs/authenticate, я предположу что это id документа mongo.

Это не готовое решение, оно строится на моих предположениях выше. Оно больше подсказывает направление.

var adminsModel = require('./admin') // файл, где определена модель 'Admin' 

function forAdminsOnly(req, res, next) {
	var currentUserId = req.session.user && req.session.user.id
	if (!currentUserId) {
		return next(new HttpError(401, "Вы не авторизованы"));
	}
	adminsModel.findOne({_id: currentUserId}, function (err, userDoc) {
		if (!userDoc || userDoc.role !== 'admin') {
			next(new HttpError(401, "Только админам"));
		} else {
			next();
		}
	})
}
1 лайк

Спасибо. Теперь я понял куда идти. Не получается получить id юзера.

выдает undefined.
var currentUserId = req.session.user.id
выдает:
TypeError: Cannot read property ‘id’ of undefined

Получил id так:

var currentUserId = req.user.id

1 лайк