javascript - 使用本地护照时如何判断客户端是否经过身份验证?
问题描述
在尝试确定客户端(React)是否经过身份验证以显示不同的页面时,我遇到了一个问题。我知道本地护照在客户端上设置了一个带有会话 ID 的 cookie,但document.cookie
返回一个空字符串。
我的本地护照和会话设置非常标准
// --------------- SESSION ---------------
app.use(session({
secret: process.env.SESSION_SECRET,
saveUninitialized: true,
resave: true
}))
// --------------- PASSPORT ---------------
passport.use(new LocalStrategy({
usernameField: 'email'
}, (email, password, done) => {
User.findOne({ email }, function (err, user) {
if (err) return done(err)
if (!user) {
return done(null, false, { message: 'User not found.' })
}
if (user.password !== password) {
return done(null, false, { message: 'Incorrect password.' })
}
return done(null, user)
})
}))
passport.serializeUser((user, done) => {
done(null, user.id)
})
passport.deserializeUser(async (id, done) => {
try {
const user = await User.findById(id)
if(!user)
return done(new Error('User not found'))
done(null, user)
} catch (err) {
done(err)
}
})
app.use(passport.initialize())
app.use(passport.session())
那么如何检查客户端是否经过身份验证?
解决方案
我通过/auth/user
在返回的服务器上添加一个端点解决了这个问题req.user
。
推荐阅读
- android - 未找到显示属性“android:layout_constraintWidth_percent”的 Android 约束布局
- angular - Angular可以在资产文件夹之外提供图像吗
- comments - 如何注释 .class 文件的行?
- c# - 具有相关模型属性的 MVC 模型
- html - 为什么容器 div 不是全高?
- django - 模板不存在
- java - 如何使用 Weka timeseriesForecasting 检索预测日期?
- ruby - 这是 ruby 中的有效调用/语法吗?
- ms-access - MS Access - 在组合框中将天数显示为年数
- android - 如何使用当前比例和填充将图像移动到位置 x、y 坐标