Вот пример примера из моего проекта:
authorizeLocal: (req, res, next) => {
passport.authenticate('local-auth', (err, user, info) => {
if (info) console.log(info);
if (err) return next(err);
if (!user) return res.status(200).send({failReason: 'wrong login/password'});
req.logIn(user, err => {
if (err) return next(err);
delete user.password;
req.session.cookie.maxAge = 24 * 60 * 60 * 1000; // 24 hours
if (user.role === 'operator') {
user.status = 'Online';
operatorsService.setStatus('Online', user.id)
.then(result => {
dialogsService.getWaitingDialogs();
user.work_time = result;
res.status(200).send(user);
})
.catch(() => res.status(200).send({failReason: 'Service error'}));
} else res.status(200).send(user);
});
})(req, res, next);
},
Там вы можете увидеть паспорт req.logIn
, который (нуждается в стратегии local-auth
или другом в вашем случае) выполняет аутентификацию, и, если успех запускает логику обратного вызова,Глубже вы можете иметь любую логику получения / генерации пользователя / объекта.Я оставил свой случай, например.OperatorsService.setStatus
возвращает некоторые временные данные, которые сохраняются пользователю (пользователь получен в качестве параметра обратного вызова после выполнения логики стратегии) и отправляются в качестве ответа.Вы можете добавить user.isAuthenticated = req.isAuthenticated();
туда.
Таким образом, вы получите что-то вроде:
auth.route.js
app.get('/login', authCtrl.authorizeLocal);
authCtrl.js
authorizeLocal: (req, res, next) => {
passport.authenticate('saml', (err, user, info) => {
if (info) console.log(info);
if (err) return next(err);
// if (!user) return res.status(200).send({failReason: 'wrong login/password'});
req.logIn(user, err => {
if (err) return next(err);
res.status(200).send({isAuthenticated: req.isAuthenticated()}));
});
})(req, res, next);
},