Как определить, когда пользователь вошел в систему | Express | Паспорт | Узел - PullRequest
0 голосов
/ 22 января 2020

Я создал собственный express внутренний API (порт 3000) и Vue. js внешний порт (8080). Я реализовал систему авторизации паспортной аутентификации на своем внутреннем сервере. сервер. Если я go на localhost: 3000 / auth / google, система входа в систему работает, и я получаю google-ID в моей базе данных mon goose.

У меня есть этот код на моем сервере, который перенаправляет на мой фронт конец при успешном входе в систему, но как я теперь узнаю, что пользователь вошел в мой Vue. js интерфейс?

app.get(
  '/auth/google',
  passport.authenticate('google', {
    scope: ['profile']
  })
);

app.get(
  '/auth/google/callback',
  passport.authenticate('google', { failureRedirect: '/login' }),
  function(req, res) {
    res.redirect('http://localhost:8080/profile');
  }
);

и моя конфигурация паспорта настроена так

passport.serializeUser((user, done) => {
  done(null, user);
});

passport.deserializeUser((id, done) => {
  User.findById(id, function(err, user) {
    done(err, user);
  });
});

module.exports = function(passport, GoogleStrategy) {
  passport.use(
    new GoogleStrategy(
      {
        clientID: process.env.GOOGLE_CLIENT_ID,
        clientSecret: process.env.GOOGLE_CLIENT_SECRET,
        callbackURL: 'http://localhost:3000/auth/google/callback'
      },
      function(token, tokenSecret, profile, done) {
        var query = { googleId: profile.id };
        var update = {
          $set: {
            googleId: profile.id
          }
        };
        var options = { new: true, upsert: true };
        User.findOneAndUpdate(query, update, options, function(err, u) {
          return done(err, u);
        });
      }
    )
  );
};````

Ответы [ 2 ]

1 голос
/ 22 января 2020

Вы можете сгенерировать jsonwebtoken и установить его в cook ie объекта response

app.get(
  '/auth/google/callback',
  passport.authenticate('google', { failureRedirect: '/login' }),
  function(req, res) {
    let token = jwt.sign({
       exp: Math.floor(Date.now() / 1000) + (60 * 60),
       user: req.user //if you have user here
       }, 'secret');
    res.cookie("token", token, {httpOnly:false})
    res.redirect('http://localhost:8080/profile');
  }
);

, а в Vue вы можете использовать пакет типа vue-cookies, чтобы получить повар ie $cookies.get('token')

0 голосов
/ 22 января 2020

Внутри вашего защищенного маршрута вы должны видеть пользователя в поле req.user:

app.get('/protectedURL',
  passport.authenticate('google'),
  function(req, res) {
    res.json(req.user);
  });

Вызов / protectedURL вернет ошибку 401, если пользователь не вошел в систему.

...