req.user не определен и false для isAuthenticated - PullRequest
0 голосов
/ 07 марта 2020

Я использую паспорт. js для моего проекта, но когда я использую req.user, он выдает undefined , поэтому, если я напишу req.user.username, это не может быть известно, что это имя пользователя, однако оно уже существует в схеме (models / db. js) , поэтому, если я захочу использовать isAuthenticated(), это будет false

конфиг / паспорт. js

const localStrategy = require('passport-local').Strategy;
const passport = require('passport');
const bcrypt = require('bcryptjs');

// Load User model Schema
const User = require('../model/db');
module.exports = function(passport){
    passport.use('local-signin' , new localStrategy({
        usernameField : 'email' ,
        passwordField : 'password' ,
        passReqToCallback : true ,
    } , ( req , email , password ,  done)=>{


        User.findOne({email : email} , (err , user)=>{
            if(err){
                return done (err)
            }

            if (! user){
                return done( null , false , req.flash('signinError' , 'this user not found'))
            }

            return done(null , user)
        })


    }))
}

приложение. js

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
const mongoose = require('mongoose');
const session = require('express-session');
const flash = require('connect-flash');
const passport = require('passport');
const bodyParser = require('body-parser');

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');

var app = express();

//passport-local
require('./config/passport')(passport);

//bodyParser
app.use(bodyParser.json());      
app.use(bodyParser.urlencoded({extended: true}));

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'hbs');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());

//session
app.use(session({
  secret : 'cookie_secret',
  saveUninitialized: false,
  resave: false
}));

//flash
app.use(flash())

//passprot
// facebook
require('./config/fb')(passport);
//passport
app.use(passport.initialize());
app.use(passport.session());

app.use(express.static(path.join(__dirname, 'public')));

app.use('/', indexRouter);
app.use('/users', usersRouter);

////////////////////// DB connecting /////////////////////////////
mongoose.connect('mongodb://localhost/product', { useUnifiedTopology: true, useNewUrlParser: true }, (err, res)=>{
  (err)?console.log('ERR While connecting to DB => ' + err):console.log('DB is connected successfully...');
});

//////////////////////////////////////////////////////////////////

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;

индекс. js (часть входа в систему)

//GET login
router.get('/login', (req, res, next)=>{
  var messageLoginErr = req.flash('signinError')
  res.render('login', {messages : messageLoginErr}); 
});

router.post('/login', passport.authenticate('local-signin', {
  session: false,
  successRedirect: '/',
  failureRedirect: '/login',
  failureFlash: true,
}));

Проблема в следующих строках кода, если я напишу console.log(req.user), он выдает в консоли undefined как это происходит !!!

// // /* GET home page. */
router.get('/', function (req, res, next) {
  console.log(req.user)
// etc.......

узел V: 10.16.1

express V: ~ 4.16.1

паспорт V: ^ 0.4.0

локальный паспорт V: ^ 1.0.0

...