Как отправить объект и пройти аутентификацию по паспорту одновременно - PullRequest
0 голосов
/ 20 ноября 2018

Как бы расплывчато ни звучал вопрос, мне нужен способ отправить объект json, а также одновременно пройти аутентификацию по паспорту.Объект req.isAuthenticated, который будет выбран с помощью axios позже во внешнем интерфейсе в качестве контрольной точки.Это то, что я намерен.Пока с кодом ниже, объект не будет отправлен.

app.get('/login',
    passport.authenticate('saml', {
        successRedirect: '/assert',
        failureRedirect: '/',
    }),
    (req, res) => {
        res.json({isAuthenticated: req.isAuthenticated()})
    }
);

1 Ответ

0 голосов
/ 20 ноября 2018

Вот пример примера из моего проекта:

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);
},
...