Аутентификация по паспорту не сохраняется между конечными точками

Я пишу экспресс-приложение, которое использует паспорт.js для аутентификации, и я хотел бы использовать экспресс-сеанс, чтобы пользователь оставался в системе, если я вызываю другую конечную точку. Passport.authenticate и req.logIn оба работают, но когда я вызываю другую конечную точку, req.isAuthenticated() возвращает false, а req.user не определен

Вот мой код настройки для паспорта:

passport.use(new LocalStrategy(
    function(username, password, done) {
        db.all("SELECT * from users WHERE username='" + username +"'", function(err, rows) {
     if (err != null) {
        return done(err);
     }
     if (rows.length == 0) {
        return done(null, false, {message: "No user found"});
     }
     var row = rows[0]
     bcrypt.compare(password, row.password, function(err, res) {
        if (err) {
            return done(err)
        }
        if (res) {
            return done(null, username)
        } else {
            return done(null, false, {message: "Incorrect password"})
        }
     })
   })
  }
))

passport.serializeUser((username, done) => {
    done(null, username);
});

passport.deserializeUser(function(id, done) {
   db.all("SELECT * from users WHERE username='" + id + "'", function(err, rows){
       if (err != null) {
           return done(err)
       }
       if (rows.length == 0) {
           return done(null, false)
       }
       return done(null, id)
    })
})

// add & configure middleware
app.use(session({
    store: new SQLiteStore,
    secret: my-secret
    resave: false,
    saveUninitialized: true
}))
app.use(passport.initialize());
app.use(passport.session());

Это моя конечная точка входа

app.post('/login', function(req, res) {
    passport.authenticate('local', function(err, user, info) {
        if (err) { 
           return res.status(500).json({ err })
        }
        if (!user) { 
            return res.status(400).json({
                err: info.message
            })
        }
        req.logIn(user, function(err) {
            if (err) { 
                console.log(err)
                return res.status(500).json({ err })
            }
            res.status(200).json({
                msg: 'Success'
            })
        });
    })(req, res)
})

В этот момент все в порядке. Он выводит правильный идентификатор пользователя.

Затем я вызываю эту конечную точку:

app.post('/check-log-in', function(req, res, next) {
    console.log(req.user)
    console.log(req.isAuthenticated())
    if (req.user) {
        res.status(200).json({
            loggedIn: true
        })
    } else {
        res.status(200).json({
            loggedIn: false
        })
    }
})

req.user не определен, а req.isAuthenicated() возвращает false.

Я уверен, что где-то неправильно настроил паспорт, но я просмотрел примеры и даже часть кода из другого проекта, который работал, но, похоже, ничего не помогает. Любой совет?


person Gautam Jethwani    schedule 23.12.2018    source источник


Ответы (1)


Этот ответ решил мою проблему. Была проблема с выборкой, поэтому я переключился на axios

person Gautam Jethwani    schedule 25.12.2018