Я использую паспорт. 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