如何从 passport.authenticate 中获取成功和错误消息?
How To Get Success and Error Messages Out of passport.authenticate?
我正在使用 passport-local 身份验证,我主要在一个非常简单的 React 应用程序 运行 中使用 server.js 文件。如果 username === password
,我将简单的 LocalStrategy 函数设置为 return 成功,否则失败。
我知道在 passport.authenticate 登录测试失败后,下一个函数不会执行。我不知道的是 如何获取我在 LocalStrategy 函数中传递给 done
方法 的错误消息。
我在 codesandbox URL 中得到了应用程序 运行 没有错误。
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);
});
您可以像这样将回调传递给 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()
});
您可以在 here.
的 Custom Callback
部分找到文档
我正在使用 passport-local 身份验证,我主要在一个非常简单的 React 应用程序 运行 中使用 server.js 文件。如果 username === password
,我将简单的 LocalStrategy 函数设置为 return 成功,否则失败。
我知道在 passport.authenticate 登录测试失败后,下一个函数不会执行。我不知道的是 如何获取我在 LocalStrategy 函数中传递给 done
方法 的错误消息。
我在 codesandbox URL 中得到了应用程序 运行 没有错误。
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);
});
您可以像这样将回调传递给 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()
});
您可以在 here.
的Custom Callback
部分找到文档