【发布时间】:2022-01-04 05:49:22
【问题描述】:
我在这里查看了几个类似的问题,但似乎没有一个回答我的具体问题。但我只是想在登录错误时回传一条自定义消息,但不知道如何获取它。
所以这是我的 passport.js 文件中的本地策略代码:
passport.use(
new LocalStrategy((username, password, done) => {
User.userSearch(username)
.then((user) => {
console.log({ user });
if (!user.allow_login) {
// don't allow login, send back message
return done(null, false, {
message: 'Login disabled right now.',
});
} else if (user?.password) {
...
然后是我的用户网关中的登录路由:
router.post(
'/login',
(req, res, next) => {
if (req.isAuthenticated()) {
req.session.touch();
}
next();
},
passport.authenticate('local', {
failureRedirect: '/login',
failureFlash: true,
}),
(req, res) => {
console.log({ res });
console.log({ req });
// if you made it here, the user is real and authentic
// check rememberMe and set cookie age accordingly
if (req.body.rememberMe) {
req.session.cookie.maxAge = 30 * 24 * 60 * 60 * 1000; // Cookie expires after 30 days
} else {
req.session.cookie.expires = false; // Cookie expires at end of session
}
// create new user object with email, customer name, and type
const user = {
email: req.user.email,
type: req.user.type,
first: req.user.first_name,
last: req.user.last_name,
filled_in: req.user.filled_in_basic_profile,
};
res.status(200).json({ user });
}
);
我能找到的所有其他示例似乎在 passport.authenticate("local" 部分之后使用了不同的代码。我在客户端返回的只是 401。
**更新:** 如果有帮助,请在调用登录函数的地方添加客户端代码。
export const login = (user) => {
return (
axios
// .post('/users/login', {
.post(baseURL + '/users/login', {
//.post(baseURL + '/auth/', {
username: user.email,
password: user.password,
rememberMe: user.rememberMe
})
.then((res) => {
...
【问题讨论】:
-
你能把你打电话给
done(...)的其他代码行贴出来吗?
标签: node.js passport.js middleware