gpt4 book ai didi

node.js - 快速 Passport 检查用户是否经过身份验证

转载 作者:太空宇宙 更新时间:2023-11-03 22:23:04 25 4
gpt4 key购买 nike

我正在使用 Passport 登录并显示“/home”。登录有效并重定向到“/home”。但是此端点不 protected ,可以通过在浏览器中输入来访问。我尝试使用 req.isAuthenticated ()(并在这里解决了多个问题)无济于事。

路线//index.js

var express = require('express');
var router = express.Router();
var User = require('../models/user');
var passport = require('passport');
var session = require('express-session');
const LocalStrategy = require('passport-local').Strategy;




passport.use(new LocalStrategy(
function(username, password, done) {
User.findOne({
username: username
}, function(err, user) {
if (err) {
return done(err);
}

if (!user) {
return done(null, false);
}

if (user.password != password) {
return done(null, false);
}
return done(null, user);
});
}
));





router.get('/', function(req, res, next) {
res.render('index', { title: 'Express' });
});

router.get('/login', function(req, res, next) {
res.render('login');
});

router.post('/login', passport.authenticate('local', { failureRedirect : '/', successRedirect : '/home'}))

router.get('/register', function(req, res, next) {
res.render('register');
});



router.get('/logout', function(req, res){
req.logout();
res.redirect('/');
});

router.get('/home', ensureLocalAuthenticated, function(req, res){
res.render('home', { user: req.user });
});



function ensureLocalAuthenticated(req, res, next) {
console.log(req.isAuthenticated());
if (req.isAuthenticated()) { return next(); }
res.redirect('/login');
}



module.exports = router;

在我的 app.js 文件中,我配置了如下 Passport :

//passportconfig
app.use(passport.initialize());
app.use(passport.session());

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

passport.deserializeUser(function(id, done){
User.findById(id, function(err, user){
done(err, user)
})
})

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

isAuthenticated 总是返回 false,无法使用该中间件登录。如果我删除它,我可以正常登录,但所有用户都可以访问“/home”

最佳答案

将以下行添加到 app.js 对我有用:

app.use(require('express-session')({
secret: 'keyboard cat',
resave: false,
saveUninitialized: false
}));

所以 Passport 配置如下:

var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var passport = require('passport');
var mongoose = require('mongoose');
var User = require('./models/user')
const LocalStrategy = require('passport-local').Strategy;

使用它们:

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

app.use(require('express-session')({
secret: 'keyboard cat',
resave: false,
saveUninitialized: false
}));

// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())
app.use(express.static(path.join(__dirname, 'public')));

//passportconfig
app.use(passport.initialize());
app.use(passport.session());

// used to serialize the user for the session
passport.serializeUser(function(user, done) {
done(null, user.id);
//
});

// used to deserialize the user
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});

关于node.js - 快速 Passport 检查用户是否经过身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51323082/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com