Паспортная сессия не работает - PullRequest
0 голосов
/ 29 апреля 2018

Я пытаюсь построить систему входа в систему, используя экспресс и паспорт.

Насколько я знаю, я могу использовать req.user для доступа к идентификатору пользователя и правильного хранения его действий, и req.isAuthenticated () будет иметь значение true, если Passport работает должным образом, однако он не работает.

По какой-то причине req.user всегда не определен, а req.isAuthenticated () всегда ложен.

Это мой app.js ->

const express = require('express');
const http = require('http');
const session = require('express-session');
const bodyParser = require('body-parser');

const passport = require('passport');

const route = require('./controllers/core');          **// CORE.JS**

const app = express();

app.set('view engine', 'ejs');

app.use('/css', express.static('css'));
app.use('/js', express.static('js'));
app.use('/themify', express.static('themify'));

app.use(session({
    secret: 'keyboard cat',
    resave: false,
    saveUninitialized: false
    //cookie: { secure: true }
}));

app.use(bodyParser.urlencoded({ extended: false }));
app.use(passport.initialize());
app.use(passport.session());

app.use(route);

//core(app);

app.listen(3000);

А это мой core.js

const router = require('express').Router();

const passport = require('passport');
const bodyParser = require('body-parser');
const mysql      = require('mysql');
const connection = mysql.createConnection({
    host     : 'localhost',
    user     : 'root',
    password : '',
    database : 'pharmate',
    dateStrings: 'date'
});


const urlencodedParser = bodyParser.urlencoded({ extended: false });

router.get('/index', function(req,res){
    console.log(req.user);
});

router.post('/index', urlencodedParser, function(req,res){

    var email = req.body.email;
    var pass = req.body.password;
    connection.query("SELECT `Pharmacy_ID`, `Email`, `Password` FROM `pharmacy` WHERE Email = ? AND Password = ?", [email, pass], function (error, results, fields) {
        if (error) res.send(error);//throw error;
        else{
            if(results.length>0){

                req.login(results[0], function(err){
                    res.redirect('index');
                });
            }
            else{
                res.redirect('login');
            }
        }
    });

});


passport.serializeUser(function(user, done) {
    done(null, user.id);
});

passport.deserializeUser(function(id, done) {
    done(null, user);
});

module.exports = router;

Любая помощь будет оценена. Заранее спасибо.

1 Ответ

0 голосов
/ 29 апреля 2018

Вы должны обрабатывать аутентификацию как:

app.post('/login',
  passport.authenticate('local', {
    successRedirect: '/secret',
    failureRedirect: '/login',
  })
);

Вы установили локальную стратегию паспорта?

...