【问题标题】:How to tell if client is authenticated when using passport-local?使用本地护照时如何判断客户端是否经过身份验证?
【发布时间】:2021-01-19 10:10:00
【问题描述】:

在尝试确定客户端(React)是否经过身份验证以显示不同的页面时,我遇到了问题。我知道passport-local在客户端设置了一个带有会话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())

那么如何检查客户端是否经过身份验证?

【问题讨论】:

    标签: javascript node.js reactjs authentication passport.js


    【解决方案1】:

    我通过在返回 req.user 的服务器上添加一个 /auth/user 端点解决了这个问题。

    【讨论】:

      猜你喜欢
      • 2021-02-05
      • 2020-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-02
      • 2019-08-28
      • 2019-06-14
      相关资源
      最近更新 更多