Javascript 使用passport google oauth向req.user添加附加数据

Javascript 使用passport google oauth向req.user添加附加数据,javascript,node.js,express,passport.js,google-oauth,Javascript,Node.js,Express,Passport.js,Google Oauth,我有一个使用google oauth passport策略对用户进行身份验证的路由,(/auth/google)我还想在该路由的url中传递额外的数据作为查询(/auth/google?someParam=SOME_PARAM),我想在年从google取回该数据时将其添加到req.user)(/auth/google/callback)。问题是我可以通过/auth/google访问此查询,但谷歌会将我重定向到/auth/google/callback,它不再有权访问此数据 注-由于设计限制,我无

我有一个使用google oauth passport策略对用户进行身份验证的路由,(
/auth/google
)我还想在该路由的url中传递额外的数据作为查询(
/auth/google?someParam=SOME_PARAM
),我想在年从google取回该数据时将其添加到
req.user
)(
/auth/google/callback
)。问题是我可以通过
/auth/google
访问此查询,但谷歌会将我重定向到
/auth/google/callback
,它不再有权访问此数据

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

谷歌护照

代码:

// 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);

在向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;

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

谢谢!我会尝试一下,并让您知道它是如何运行的(:API是这样工作的:
/auth/google?state=state\u value
?因为文档对此不清楚。而且他们还没有指定我以后如何访问此数据?如果有明显的答案,我就是看不到它的状态={您发送的任何值}都会附加到重定向uri。因此,当用户被发送回您的站点时,您可以从uri参数访问它。