Паспорт JS - логин всегда проходит через сбойПрямой маршрут - PullRequest
0 голосов
/ 16 апреля 2020

В настоящее время я занимаюсь разработкой собственного веб-приложения.

Я успешно регистрирую пользователей с соответствующим именем пользователя, ха sh и свойствами соли. Однако при попытке войти в систему меня всегда перенаправляют на маршрут failRedirect (даже когда я знаю, что правильно вводим имена пользователей и пароли).

Я прошел через StackOverflow и мой код с прекрасной расческой, но я просто не вижу, что не так.

Ниже приведена конфигурация моего приложения. js

const   express         = require('express'),
        app             = express(), 
        mongoose        = require('mongoose'),
        bodyParser      = require('body-parser'),
        passport        = require('passport'), 
        LocalStrategy   = require('passport-local'),    
        User            = require('./models/user');

//CONFIGURATION OF mongoose, bodyParser, ejs and setting the use of public folders for CSS; 
mongoose.connect("mongodb://localhost/kinetic", {useUnifiedTopology: true, useNewUrlParser: true, useCreateIndex: true }); 
app.use(bodyParser.urlencoded({extended:true}));
app.set('view engine', 'ejs'); 
app.use(express.static(__dirname + '/public')); 

//PASSPORT CONFIG 
app.use(require("express-session")({ 
    secret: "Any message can go here apparently",   
    resave: false, 
    saveUninitialized: false
})); 
app.use(passport.initialize()); 
app.use(passport.session()); 
passport.use(new LocalStrategy(User.authenticate())); //comes from passport-local-mongoose
passport.serializeUser(User.serializeUser()); 
passport.deserializeUser(User.deserializeUser());

Ниже приведена копия моей формы входа (которую я получаю правильно с моим запросом на получение):

<form action="/login" method="POST">    
    <input type="text" name="username">
    <input type="password" name="password">
    <input type="submit" value="Login">
</form> 

Как видите, я передаю соответствующие свойства имени для паспорта.

Ниже приведена копия моего почтового запроса с использованием промежуточного программного обеспечения для паспорта:

router.post("/login", passport.authenticate("local", {
    successRedirect: "/campgrounds",
    failureRedirect: "/loginfail"
    }), (req, res)=>{ 
});

Ниже представлена ​​копия json зарегистрированного пользователя:

{
  followers: [],
  _id: 5e978583865a1124c8a61d46,
  username: 'bob',
  bio: 'bob',
  salt: 'f9e38abf7383aa431f42bf3a30ecdb037c5876f15c44ff64e961e5759bcbae54',
  hash: '379702439bf8e1.........dd2fc7e4f50',
  __v: 0
}

РЕДАКТИРОВАТЬ: ./models/user

const   mongoose                = require('mongoose'), 
        passportLocalMongoose   = require('passport-local-mongoose'); 

const UserSchema = new mongoose.Schema({
    username: {type: String, unique: true}, 
    password: String,  
}); 

UserSchema.plugin(passportLocalMongoose); 

module.exports = mongoose.model("User", UserSchema); 

Я в полном замешательстве, хотя я могу себе представить, что решение находится у меня под носом.

1 Ответ

0 голосов
/ 16 апреля 2020

Так ... Я думаю, что, возможно, выяснил, что было не так:

В моем основном файле (приложение. js) я настроил свои маршруты в верхней части страницы (я не показывал весь свой файл, потому что я никогда не думал, что это будет необходимо (я новичок в кодировании, если вы никогда не догадались).

Мое старое приложение. js выглядело примерно так:

const   express         = require('express'),
        app             = express(), 
        mongoose        = require('mongoose'),
        bodyParser      = require('body-parser'),
        passport        = require('passport'), 
        passportLocalMongoose = require('passport-local-mongoose'), 
        LocalStrategy   = require('passport-local'),    
        User            = require('./models/user');

//REQUIRE ROUTE FILES:
const   exerciseRoutes  = require('./routes/exercises'), 
        commentRoutes   = require('./routes/comments'),
        indexRoutes     = require('./routes/index'); 

//TAKE NOTE OVER HERE: 
    app.use('/', indexRoutes); 
    app.use('/exercises', exerciseRoutes); 
    app.use('/exercises/:slug/comments', commentRoutes);


//CONFIGURATION OF mongoose, bodyParser, ejs and setting the use of public folders for CSS; 
mongoose.connect("mongodb://localhost/kinetic", {useUnifiedTopology: true, useNewUrlParser: true, useCreateIndex: true }); 
app.use(bodyParser.urlencoded({extended:true}));
app.set('view engine', 'ejs'); 
app.use(express.static(__dirname + '/public')); 

//PASSPORT CONFIG 
app.use(require("express-session")({ 
    secret: "Any message can go here apparently",   
    resave: false, 
    saveUninitialized: false
})); 
app.use(passport.initialize()); 
app.use(passport.session()); 
passport.use(new LocalStrategy(User.authenticate())); //comes from passport-local-mongoose
passport.use(User.createStrategy()); 
passport.serializeUser(User.serializeUser()); 
passport.deserializeUser(User.deserializeUser());

app.get('/', (req, res)=>{
    res.send("HOME PAGE!")
}); 

app.use((req, res, next)=>{
    res.locals.currentUser = req.user; 
    next()
});


//SET UP PORT: 
app.listen(3000, ()=>{
    console.log("Connected to kinetic!")
})

Все, что мне нужно было сделать, это переместить это ...

app.use('/', indexRoutes); 
        app.use('/exercises', exerciseRoutes); 
        app.use('/exercises/:slug/comments', commentRoutes);

... чуть выше моего слушателя порта / приложения и voilà

Теперь мое приложение. js Файл выглядит так:

const   express         = require('express'),
        app             = express(), 
        mongoose        = require('mongoose'),
        bodyParser      = require('body-parser'),
        passport        = require('passport'), 
        passportLocalMongoose = require('passport-local-mongoose'), 
        LocalStrategy   = require('passport-local'),    
        User            = require('./models/user');

//REQUIRE ROUTE FILES:
const   exerciseRoutes  = require('./routes/exercises'), 
        commentRoutes   = require('./routes/comments'),
        indexRoutes     = require('./routes/index'); 

//CONFIGURATION OF mongoose, bodyParser, ejs and setting the use of public folders for CSS; 
mongoose.connect("mongodb://localhost/kinetic", {useUnifiedTopology: true, useNewUrlParser: true, useCreateIndex: true }); 
app.use(bodyParser.urlencoded({extended:true}));
app.set('view engine', 'ejs'); 
app.use(express.static(__dirname + '/public')); 

//PASSPORT CONFIG 
app.use(require("express-session")({ 
    secret: "Any message can go here apparently",   
    resave: false, 
    saveUninitialized: false
})); 
app.use(passport.initialize()); 
app.use(passport.session()); 
passport.use(new LocalStrategy(User.authenticate())); //comes from passport-local-mongoose
passport.use(User.createStrategy()); 
passport.serializeUser(User.serializeUser()); 
passport.deserializeUser(User.deserializeUser());

app.get('/', (req, res)=>{
    res.send("HOME PAGE!")
}); 

app.use((req, res, next)=>{
    res.locals.currentUser = req.user; 
    next()
});

//MUST BE BELOW PASSPORT CONFIGURATION! 
app.use('/', indexRoutes); 
app.use('/exercises', exerciseRoutes); 
app.use('/exercises/:slug/comments', commentRoutes);

//SET UP PORT: 
app.listen(3000, ()=>{
    console.log("Connected to kinetic!")
});
...