如何通过单击浏览器中的后退按钮来修复用户对授权页面的访问

How to fix user access to authorized pages by click on backward button in browsers

我正在尝试通过 paasportjs 库构建登录页面,这是我的代码,它可以正常工作,但是每当一个用户成功登录和成功注销时,其他未经许可(未经登录)的用户都可以看到该用户的页面,只需点击浏览器中的后退按钮,我就会知道如何解决后退问题?

//Login Section

const LocalStrategy = require('passport-local').Strategy;
passport.use(new LocalStrategy({
            usernameField: "email",
            passwordField: "password",
            passReqToCallback: true
        },
        (email, password, done) => {
            User.findOne({ email: email }).then(user => {
                    if (!user) {
                        return done(null, false, { message: 'The email is not registered' })
                    }

                    //Match password
                    bcrypt.compare(password, user.password, (err, result) => {
                        if (err) throw err;

                        if (result) {
                            return done(null, user)
                        } else {
                            return done(null, false, { message: "Password incorrect" })
                        }
                    });
                })
                .catch(err => console.log(err))
        })

)

//Serializer和deserializer部分

passport.serializeUser((user, done) => {
    done(null, user.id);
})
passport.deserializeUser((id, done) => {
    User.findById(id, (err, user) => {
        console.log('deserializing user:', user);
        done(err, user);
    });
})

app.listen(process.env.PORT || 8008, process.env.ip, function() {
    console.log('Server is running!');
});

对于您希望只有经过身份验证的用户才能看到的 api 页面 return 添加

passport.isAuthenticated

用于用户登录并检查用户的权限

passport.isAuthorized

在定义 api.You 的路由期间,也可以在同一请求中同时使用两者。例如在你的代码中 /dashboard api

app.get('/dashboard', passport.isAuthenticated, passport.isAuthorized('user'), (req, res) => {

    res.render('dashboard', {
        pageName: 'Navid'

    })
})



passport.isAuthenticated = (req, res, next) => {  
    if (req.isAuthenticated()) {
        return next();
    }
    res.status(401);
    return next({"ERR MSG"});
};

passport.isAuthorized = (userType) => {
       return (req, res, next) => {
        if (req.user.userType == userType) {        
            return next();
        }        
        res.status(403);
        return next({"ERR MSG HERE"});
    };
};

这些是您需要在代码中添加的护照中间件