Интеграция веб-токена json в oauth20 - PullRequest
0 голосов
/ 13 мая 2019

Я пытаюсь создать API, где пользователь может зарегистрироваться по электронной почте или войти в систему с помощью Google, я использую веб-токен JSON для аутентификации и oauth20, проблема в том, могу ли я передать JWT с OAUT?

Я попытался передать его, и я получаю токен, если я консольный журнал, но как я передаю его пользователю, как я могу каким-то образом прикрепить его к объекту req.user в cb с помощью oauth или что-то подобное?

Я делаю это в стратегии Google:

 async (accessToken, refreshToken, params, profile, cb) => {

   const userCheck = await User.findOne({ googleId: profile.id });

 if (userCheck) {
        const payload = {
          user: {
            id: userCheck.id
          }
        };

        jwtToken.sign(
          payload,
          config.get("jwtSecret"),
          { expiresIn: 360000 },
          (err, token) => {
            if (err) {
              throw err;
            }
            //   console.log(token);
            return res.json({ token });
          },
          cb(null, userCheck)
        );

Мои маршруты защищены следующим образом:

router.get("/", auth, async (req, res)=>{
...some code
    }

где auth - функция промежуточного уровня

Это функция промежуточного программного обеспечения Auth:

module.exports = function (req, res, next) {

  const token = req.header("x-auth-token");

  // If no token found


 if (!token)
 {
    return res.status(401).json({ msg: "User not authorized" });
  }

  // Set token to user

 try {
    const decoded = jwtToken.verify(token, config.get("jwtSecret"));

     req.user = decoded.user;
  } 

 catch (err)
 {
    res.
status(401)
.json({ msg: "User not authenticated, please login or sign up" });
  }
  next();

};

1 Ответ

0 голосов
/ 14 мая 2019

Я нашел решение, вам нужно передать подпись токена в passport.serializeUser и затем отправить его с перенаправлением в ответ на URL перенаправления.

Функция сериализации пользователя:

passport.serializeUser(async (user, cb) => {
  const payload = {
    user: {
      id: user.id
    }
  };
  token = jwtToken.sign(payload, config.get("jwtSecret"), {
    expiresIn: 360000
  });
  console.log("serialize");
  cb(null, user.id);
});

Маршрут перенаправления:

router.get(
  "/google/redirect",
  passport.authenticate("google", { sessionStorage: false }),
  (req, res) => {
    res.redirect("/" + token);
  }
);
...