在 NodeJS 中登录后重定向到原始 URL
Redirect to original URL after login in NodeJS
我有一个 NodeJS 服务器,有些页面需要登录。目前,我有这个登录代码:
router.post("/login",
passport.authenticate("user-otp", {
successRedirect: "/dashboard",
failureRedirect: "back",
})
);
当我向未登录的用户发送 link 时,他们将被重定向到登录页面,输入凭据,转到通用页面,然后必须返回我的消息才能找到原来URL。我想压缩最后两个步骤,以便用户在登录后立即转到原始 URL。
在 之后,我尝试了以下操作:
router.post("/login", function(req, res, next) {
let success = "/dashboard";
if (req.query.redir) {
success = req.query.redir;
}
return passport.authenticate("user-otp", {
successRedirect: success,
failureRedirect: "back",
})
});
但是提交登录信息并没有得到服务器的响应,可能是因为我刚接触NodeJS和异步逻辑。
更新:我的护照功能是:
// Define the login strategy for users based on email and one-time-password.
passport.use('user-otp', new CustomStrategy(
async function(req, done) {
// logic...
let user, email = req.body.email, is_email = false;
try {
user = await User.findOne({email});
if (!user) {
return done(null, false, {message: "failed"});
}
} catch (err) {
console.error(err);
return done(err);
}
let check = await user.validateOtp(req.body.otp);
if ("valid" === check) {
return done(null, user);
} else {
return done(null, false, {});
}
}));
如何在登录后将用户重定向到原来的URL?
第一个想法很好,但我认为您应该手动调用 passport,这就是为什么您没有从服务器收到任何响应的原因。
router.post("/login", function(req, res, next) {
let success = "/dashboard";
if (req.query.redir) {
success = req.query.redir;
}
return passport.authenticate("some-strategy", {
successRedirect: success,
failureRedirect: "back",
})(req, res, next)
});
要事第一
Following Send data back with the Passport js failureRedirect method , I tried the following:
router.post("/login", function(req, res, next) {
let success = "/dashboard";
if (req.query.redir) {
success = req.query.redir;
}
return passport.authenticate("some-strategy", {
successRedirect: success,
failureRedirect: "back",
})
});
问题代码示例中的(护照)策略是"some-strategy"
,
而您定义的策略名称是 user-otp
。
如果实际实现与我上面的描述不同,请更新问题以反映正确的代码。
我有一个 NodeJS 服务器,有些页面需要登录。目前,我有这个登录代码:
router.post("/login",
passport.authenticate("user-otp", {
successRedirect: "/dashboard",
failureRedirect: "back",
})
);
当我向未登录的用户发送 link 时,他们将被重定向到登录页面,输入凭据,转到通用页面,然后必须返回我的消息才能找到原来URL。我想压缩最后两个步骤,以便用户在登录后立即转到原始 URL。
在
router.post("/login", function(req, res, next) {
let success = "/dashboard";
if (req.query.redir) {
success = req.query.redir;
}
return passport.authenticate("user-otp", {
successRedirect: success,
failureRedirect: "back",
})
});
但是提交登录信息并没有得到服务器的响应,可能是因为我刚接触NodeJS和异步逻辑。
更新:我的护照功能是:
// Define the login strategy for users based on email and one-time-password.
passport.use('user-otp', new CustomStrategy(
async function(req, done) {
// logic...
let user, email = req.body.email, is_email = false;
try {
user = await User.findOne({email});
if (!user) {
return done(null, false, {message: "failed"});
}
} catch (err) {
console.error(err);
return done(err);
}
let check = await user.validateOtp(req.body.otp);
if ("valid" === check) {
return done(null, user);
} else {
return done(null, false, {});
}
}));
如何在登录后将用户重定向到原来的URL?
第一个想法很好,但我认为您应该手动调用 passport,这就是为什么您没有从服务器收到任何响应的原因。
router.post("/login", function(req, res, next) {
let success = "/dashboard";
if (req.query.redir) {
success = req.query.redir;
}
return passport.authenticate("some-strategy", {
successRedirect: success,
failureRedirect: "back",
})(req, res, next)
});
要事第一
Following Send data back with the Passport js failureRedirect method , I tried the following:
router.post("/login", function(req, res, next) { let success = "/dashboard"; if (req.query.redir) { success = req.query.redir; } return passport.authenticate("some-strategy", { successRedirect: success, failureRedirect: "back", }) });
问题代码示例中的(护照)策略是"some-strategy"
,
而您定义的策略名称是 user-otp
。
如果实际实现与我上面的描述不同,请更新问题以反映正确的代码。