如何通过单击浏览器中的后退按钮来修复用户对授权页面的访问
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"});
};
};
这些是您需要在代码中添加的护照中间件
我正在尝试通过 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"});
};
};
这些是您需要在代码中添加的护照中间件