Как получить сообщения об ошибках и ошибках из passport.authenticate? - PullRequest
0 голосов
/ 07 января 2019

Я работаю с локальной паспортной аутентификацией, и у меня она в основном работает в очень простом приложении React, работающем из файла server.js. У меня есть простая настройка функции LocalStrategy для возврата успеха, если username === password, в противном случае это сбой.

Я получаю, что после того, как passport.authenticate не проходит проверку входа в систему, следующая функция в строке не выполняется. Чего я не знаю, так это как получить сообщение об ошибке, которое я передал в метод done в функции LocalStrategy.

Приложение работает без ошибок по этому URL-адресу в codesandbox.

https://codesandbox.io/s/github/pkellner/next-custom-server-pkellner

Server.js выглядит следующим образом:

passport.use(
  new LocalStrategy(function(username, password, done) {
    console.log(
      `LocalStrategy Function: username:${username} password:${password}`
    );

    if (username === password) {
      return done(
        null,
        { username: username },
        {
          message: "where does this message come out?"
        }
      );
    }

    return done(null, false, {
      message: "failure, nuclear meltdown"
    });
  })
);

app
  .prepare()
  .then(() => {
    const server = express();

    server.use(passport.initialize());
    server.use(
      bodyParser.urlencoded({
        extended: true
      })
    );

    server.get("/login", (req, res) => {
      console.log("in server.js login called...");
      return app.render(req, res, "/login");
    });

    server.post(
      "/login",
      passport.authenticate("local", {
        failureRedirect: "/error",
        successRedirect: "/success"
      }),
      (req, res) => {
        console.log(
          `success: server.post login   req.user.username:${
            req.user.username
          }  req.authInfo.message:${req.authInfo.message}`
        );
      }
    );

    server.get("*", (req, res) => {
      return handle(req, res);
    });

    server.listen(3000, err => {
      if (err) throw err;
      console.log("> Ready on http://localhost:3000...");
    });
  })
  .catch(ex => {
    console.error(ex.stack);
    process.exit(1);
  });

1 Ответ

0 голосов
/ 07 января 2019

Вы можете передать обратный вызов passport.authenticate() следующим образом:

passport.authenticate("local", {
    failureRedirect: "/error",
    successRedirect: "/success"
}, (err, user, options) => {
    console.log(options) // options will be the complete object you pass in done()
});

Документацию можно найти в Custom Callback разделе здесь.

...