Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 用户使用express登录后重定向到原始页面_Node.js_Express_Authentication_Redirect_Passport.js - Fatal编程技术网

Node.js 用户使用express登录后重定向到原始页面

Node.js 用户使用express登录后重定向到原始页面,node.js,express,authentication,redirect,passport.js,Node.js,Express,Authentication,Redirect,Passport.js,我正在使用express.js和passport.js来实现身份验证,在以下情况下我想将用户重定向到原始URL: 当用户按下“/pageA”上的登录按钮时(在他/她登录后,他/她应重定向到“/pageA”) 当用户转到URL(例如“/secretPage”)时,如果用户未登录,该URL将重定向到登录页面(在用户登录后,他/她应重定向到“/secretPage”) 目前,我尝试使用一个名为“express back”的包来解决这个问题。它使用会话来跟踪客户端访问过的前两个路径,并将它们分别记录在r

我正在使用express.js和passport.js来实现身份验证,在以下情况下我想将用户重定向到原始URL:

  • 当用户按下“/pageA”上的登录按钮时(在他/她登录后,他/她应重定向到“/pageA”)
  • 当用户转到URL(例如“/secretPage”)时,如果用户未登录,该URL将重定向到登录页面(在用户登录后,他/她应重定向到“/secretPage”)
  • 目前,我尝试使用一个名为“express back”的包来解决这个问题。它使用会话来跟踪客户端访问过的前两个路径,并将它们分别记录在req.prevPath和req.prevPath中

    这是我的密码:

    router.post('/login', function(req, res, next) {
        passport.authenticate('local', function(err, user, info) {
            if (err) {
                return next(err);
            }
            if (!user) {
                req.flash('error', 'Please enter the correct username and password');
                res.redirect('/login'); // Redirect to the login page if there is login failure
                return
            }
            req.logIn(user, function(err) {
                if (err) {
                    return next(err);
                }
                req.flash('success', 'You have logged in successfully!')
                res.redirect(req.prevPrevPath) // Ideally, it will redirect to the original page the client has visited
                return
            });
        })(req, res, next);
    });
    
    例如,如果用户按下“/pageA”上的登录按钮并登录,客户端访问的URL序列将是:

    .get('/pageA')(prevPath)-->.get('/login')(prevPath)-->.post('/login')(currentPath)

    这些代码工作正常,仅当用户立即成功登录时才会将用户重定向到“/pageA”。但是,如果用户一次或多次输入错误的用户名或密码,并且没有第一次登录,则URL顺序如下:

    .get('/login')(prevPath)-->.get('/login')(prevPath)-->.post('/login'))

    因此,在用户成功登录后,它会将用户重定向到登录页面,而不是“/pageA”

    有人知道如何解决这个问题吗?我感谢你的帮助