Проверка подлинности паспорта не сохраняется между конечными точками - PullRequest
0 голосов
/ 23 декабря 2018

Я пишу приложение Express, которое использует passport.js для аутентификации, и я хотел бы использовать express-session, чтобы пользователь оставался в системе, если я вызову другую конечную точку.passport.authenticate и req.log в обоих случаях работают, но когда я вызываю другую конечную точку, 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.

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

1 Ответ

0 голосов
/ 25 декабря 2018

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

...