Req.isAuthenticate () не работает после нескольких попыток исправления - PullRequest
1 голос
/ 04 мая 2020

Я создаю простое игровое приложение с использованием React и Node с использованием passport (наряду с passport-local и passport-local-mon goose) и просто не могу заставить своих пользователей оставаться аутентифицированными. Я успешно вхожу в систему, но последующий вызов ax ios (после пяти секунд) немедленно возвращает false, когда вызывается req.isAuthenticated (). Я вылил на подобные страницы stackoverflow, но ни одно из предложений не сработало.

Вот мой маршрут входа в систему:

router.route("/").post((req, res) => {

  console.log(req.session);
  //initiate the response object, which will contain one value to indicate whether the login was a success
  const responseObject = {
    loginWasSuccess: false
  };

  let authenticate = User.authenticate();
  authenticate(req.body.username, req.body.password, (err, result) => {
    if (err) {
      console.log(err);
      res.json(responseObject);
    }
    if (result) {
      req.login(result, (err) => {
        if (err) {
          return next(err);
        }
        responseObject.loginWasSuccess = true;
        return res.json(responseObject);
      });
    } else {
      res.json(responseObject);
    }
  });

});

Обратите внимание, что когда я console.log result, полный пользователь данные для правильного пользователя в моей базе данных будут напечатаны.

Вот где я настраиваю и инициализирую сессию / паспорт:

app.use(cors());
app.use(express.urlencoded({extended: false}));
app.use(express.json());
app.use(session({
  secret: process.env.SESSION_SECRET,
  resave: true,
  saveUninitialized: true
}));
app.use(passport.initialize());
app.use(passport.session());

const corsOptions = {credentials: true};
app.use(cors(corsOptions));

passport.serializeUser(function(user, done) {
  console.log("serializing user");
  console.log("user.id is: " + user._id);
  console.log(user);
  done(null, user._id);
});

passport.deserializeUser(function(id, done) {
  User.findById(id, function(err, user) {
    console.log("deserializing user");
    done(err, user);
  });
});

Обратите внимание, что когда я вхожу, оператор console.log в метод serializeUser печатает правильные данные и идентификатор пользователя, которые хранятся в моей базе данных.

Наконец, вот вызов ax ios, который я выполняю в функции handleSubmit в моем интерфейсе для извлечения данные:

    const transport = axios.create();
    transport.post("http://localhost:5000/login/", {
      username: inputData.username,
      password: inputData.password
    }).catch(err => {
      handleError();
    }).then(response => {
      console.log(response && response.data);
      if (response && !response.data.loginWasSuccess) {
        handleError();
      }
      else {
        // setRedirectRoute(props.redirectUrl || "/");
        setTimeout(() => {
          const transport = axios.create();
          transport.get("http://localhost:5000/authenticate/").catch(err => {
            handleError();
          }).then(response => {
            console.log(response && response.data);
          });
        }, 5000);
      }
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...