Моя функция аутентификации с использованием passportjs всегда будет возвращать false, даже если пользователь уже существует, и он всегда будет перенаправлять на страницу входа, и это переписывает все мои маршруты аутентификации, поэтому, когда я вхожу в систему с действительными учетными данными пользователя или создаю новый пользователь, поведение по умолчанию заключается в перенаправлении на «секретную страницу», но это только перенаправление на страницу входа каждый раз.
Я не знаю, что я делаю не так, ребята, мне нужна ваша помощь, пожалуйста ...
Я видел другие связанные вопросы, но большинство потоков на самом деле не отвечают на вопросы, или ответы, которые выглядят как решение, не работают, даже если я применил его, так как они должны быть, я все еще не знаю, что делать, чтобы сделать эта работа.
Я написал простое приложение для аутентификации пользователей при входе и выходе из системы с использованием маршрутов и passportjs.
Мой последний фрагмент кода настроен так, чтобы разрешить пользователю доступ к содержимому основного сайта, который в этом случае называется секретным шаблоном, только если пользователь является действительным пользователем (то есть он вошел в систему или успешно подписал). вверх).
Функция, которую я создал, выглядит следующим образом:
// Authenticate user Login
function isLoggedIn(req, res, next) {
if(req.isAuthenticated()) {
return next();
}
res.redirect('/login');
}
и это в основном должно было проверять, вошел ли пользователь уже в систему.
и затем я вызвал функцию как промежуточное ПО на одном из моих маршрутов:
app.get('/secret', isLoggedIn , (req, res)=>{
res.render('secret');
});
Это должно гарантировать, что пользователь вошел в систему или зарегистрировался, прежде чем он получит доступ к секретной странице, в противном случае он должен вернуть страницу входа в систему и потребовать, чтобы пользователь вошел в систему или зарегистрировался, чтобы получить доступ к секретной странице.
Это мой полный код на всякий случай, у тебя пятнистые глаза, острее, чем у меня.
var express = require('express'),
app = express(),
mongoose = require('mongoose'),
bodyParser = require ('body-parser'),
User = require('./models/user'),
passport = require('passport'),
localStrategy = require('passport-local'),
passportLocalMongoose = require('passport-local-mongoose');
mongoose.connect('mongodb://localhost/auth_demo_app', {
useNewUrlParser: true
});
app.set('view engine', 'ejs');
app.use(express.static(__dirname + '/public'));
app.use(bodyParser.urlencoded({extended: true}));
app.use(passport.initialize());
app.use(passport.session());
app.use(require("express-session")({
secret: "Rusty is the worst and ugliest dog in the wolrd",
resave: true,
saveUninitialized: true
}));
passport.use(new localStrategy(User.authenticate()));
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());
// ==================================================
// ROUTES
// ==================================================
app.get('/', (req, res)=>{
res.render('home');
});
app.get('/secret',isLoggedIn, (req, res)=>{
res.render('secret');
});
// AUTH ROUTES
// Register - Show Registration form
app.get('/register', (req, res)=>{
res.render('register');
});
// Handle user Signup
app.post('/register', (req, res)=>{
req.body.username
req.body.password
User.register(new User({username: req.body.username}), req.body.password, (err, user)=>{
if(err){
console.log(err);
return res.render('register');
}
passport.authenticate('local')(req, res, ()=>{
res.redirect('/secret');
})
})
});
// Login - Show Login form
app.get('/login', (req, res)=>{
res.render('login');
});
// Handle user Signup
app.post('/login', passport.authenticate('local', {
successRedirect: '/secret',
failureRedirect: '/login',
}),(req, res)=>{
// Other stuff goes here
});
// LOGOUT ROUTE
// Logs user out - ends user session
app.get('/logout', (req, res)=>{
req.logOut();
res.redirect('/');
});
// Authenticate user Login
function isLoggedIn(req, res, next) {
if(req.isAuthenticated()) {
console.log('User logged in successfully');
return next();
}
res.redirect('/login');
}
app.listen(3000, ()=>{
console.log('Server Started...');
});
console.log (req.isAuthenticated ()) // Всегда возвращает false.