在NodeJS中登录后重定向到原始URL



我有一个NodeJS服务器,有些页面需要登录。目前,我有以下登录代码:

router.post("/login",
passport.authenticate("user-otp", {
successRedirect: "/dashboard",
failureRedirect: "back",
})
);

当我向未登录的用户发送链接时,他们会被重定向到登录页面,输入凭据,转到通用页面,并且必须返回到我的消息才能找到原始URL。我想浓缩最后两个步骤,以便用户在登录后立即转到原始URL。

在使用Passport js failureRedirect方法发回数据之后,我尝试了以下操作:

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)
});

首先是

在使用Passport js failureRedirect方法发回数据之后,我尝试了以下操作:

<blockquote\
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",
})
});

>问题中代码示例中的(passport(策略是"some-strategy"

而您定义的策略名称是CCD_ 2。

如果实际实现与我上面的描述不同,请更新问题以反映正确的代码。

试试这个:

https://github.com/ne-cyber/login

参见src/index.ts

app.get('/task', (req,res) => {
if(login('GET', res, '/task', req.query, req.body)) {
res.render('main.ejs', {
queryObj: req.query,
postObj: req.body
})
}
})

有一个简单的函数:login(),如果它返回true(令牌有效或用户名和密码有效(,您可以呈现您的页面。保存查询参数和正文(后(参数

最新更新