使用password-google-oauth向req.user添加其他数据

时间:2018-09-25 09:05:32

标签: javascript node.js express passport.js google-oauth

我有一条路线,该路线旨在使用google oauth护照策略来验证用户身份,{/auth/google)我也想在该路线(/auth/google?someParam=SOME_PARAM)的url中传递其他数据作为查询我想在(req.user)从Google取回数据时将其添加到/auth/google/callback中的数据。问题是我可以通过/auth/google访问此查询,但是Google会将我重定向到/auth/google/callback,后者不再有权访问此数据。

注意-由于设计限制,我无法使用外部源作为数据库。

passport-google docs

代码:

// 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 :(得分:1)

您必须先在会话中存储参数,然后才能向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;

答案 1 :(得分:0)

您应该参考Google的文档。一旦用户回到您的站点,您可以使用“ state”参数传递您想要获取的任何数据。这是此参数的主要用途。 您可以查看详细信息here