добавление дополнительных данных в req.user с помощью passport-google-oauth - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть маршрут, который предназначен для аутентификации пользователя с использованием стратегии паспорта Google oauth, (/auth/google) Я также хочу передать дополнительные данные в виде запроса в URL-адресе по этому маршруту (/auth/google?someParam=SOME_PARAM), эти данные я хочудобавьте к req.user к тому времени, когда я получу его от Google (/auth/google/callback).Проблема в том, что у меня есть доступ к этому запросу через /auth/google, но Google перенаправит меня на /auth/google/callback, который больше не имеет доступа к этим данным.

note - Из-за ограничений дизайна я не могу сделать это с внешним источником в качестве базы данных.

passport-google документы

КОД:

// auth.js 

router.get(
  "/",
  (req, res, next) => {
    let siteName = req.query.siteName;
    let pageName = req.query.pageName;
    console.log("siteName", siteName);
    return next();
  },
  passport.authenticate("google", {
    scope: ["https://www.googleapis.com/auth/plus.login"]
  })
);

module.exports = router;




// authCb.js

router.get(
  "/",
  passport.authenticate("google", {
    scope: ["https://www.googleapis.com/auth/plus.login"],
    failureRedirect: "/"
  }),
  (req, res) => {
    console.log(req.user);
    res.send(req.user);
  }
);

module.exports = router;





// app.js

app.use("/auth/google", auth);
app.use("/auth/google/callback", authCb);

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Вам следует обратиться к документации Google.Вы можете использовать параметр «state» для передачи любых данных, которые вы хотите получить, когда пользователь вернется на ваш сайт.Это основное использование этого параметра.Вы можете увидеть детали здесь .

0 голосов
/ 25 сентября 2018

Вы должны сохранить свои параметры в сеансе перед отправкой запроса авторизации в Google.Затем, после перенаправления, верните свои параметры из сессии.

// auth.js 
router.get(
  "/",
  (req, res, next) => {
    req.session.lastQuery = req.query;
    return next();
  },
  passport.authenticate("google", {
    scope: ["https://www.googleapis.com/auth/plus.login"]
  })
);

module.exports = router;

// authCb.js

router.get(
  "/",
  passport.authenticate("google", {
    scope: ["https://www.googleapis.com/auth/plus.login"],
    failureRedirect: "/"
  }),
  (req, res) => {
    const { lastQuery } = req.session;
    console.log(lastQuery);
  }
);

module.exports = router;
...