Как определить, аутентифицирован ли клиент при использовании passport-local?

#javascript #node.js #reactjs #authentication #passport.js

#javascript #node.js #reactjs #аутентификация #passport.js

Вопрос:

Я сталкиваюсь с проблемой при попытке выяснить, аутентифицирован ли клиент (React) или нет, чтобы показывать разные страницы. Я знаю, что passport-local устанавливает файл cookie с идентификатором сеанса на клиенте, но document.cookie возвращает пустую строку.

Настройки My passport-local и session довольно стандартны

 // --------------- 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())
 

Итак, как я могу проверить, аутентифицирован ли клиент или нет?

Ответ №1:

Я решил эту проблему , добавив /auth/user конечную точку на сервере , которая возвращает req.user .