gpt4 book ai didi

node.js - bookshelf.js 不适用于 Passport

转载 作者:太空宇宙 更新时间:2023-11-04 02:10:26 24 4
gpt4 key购买 nike

我有一个带有书架和 Passport 的简单例份验证面板,但是当我尝试登录时,我得到白色空白页 500。我尝试了在网络中找到的所有解决方案。请帮忙。

配置/passport.js

...
passport.use('local-login', new LocalStrategy({
passReqToCallback : true
},
function(req, username, password, done) {
User.where({username: username}).fetch().then(function(err, user) {
if (err) return done(err);
if (!user) {
return done(null, false, req.flash('loginMessage', 'Cant find user!'));
}
user = user.toJSON();
if(User.validPassword(password, user.password)){
return done(null, false, req.flash('loginMessage', 'Invalid pass!'));
}
return done(null, user);
}).catch(function(err) {
console.error(err);
});
}
));
...

路由/auth.js

...
router.post('/login', passport.authenticate('local-login', {
successRedirect: '/users/profile',
failureRedirect: '/auth/login',
failureFlash: true
}));
...

服务器.js

const express       = require('express');
const session = require('express-session');
const passport = require('passport');
const flash = require('connect-flash');
const path = require('path');
const favicon = require('serve-favicon');
const logger = require('morgan');
const cookieParser = require('cookie-parser');
const bodyParser = require('body-parser');

const config = require('./config/app.js');

const index = require('./routes/index');
const auth = require('./routes/auth');
const users = require('./routes/users');

require('./config/passport.js')(passport);

const app = express();

app.set('env', config.website.env);

app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')))
app.use(session({
secret: config.security.salt,
resave: true,
saveUninitialized: true
}));
app.use(passport.initialize());
app.use(passport.session());
app.use(flash());

app.use('/', index);
app.use('/auth', auth);
...

最佳答案

我认为这里的主要问题在于then()的使用。它不像传统回调那样采用 err 参数。

另一个小问题是 catch() 应该将错误转发给 Passport,而不是仅仅记录它。

所以尝试将其更改为类似的内容

passport.use('local-login', new LocalStrategy({
passReqToCallback : true
},
function(req, username, password, done) {
new User({username: username})
.fetch()
.then(function(user) {
if (!user) {
return done(null, false,
req.flash('loginMessage', 'Cant find user!'));
}
user = user.toJSON();
if (User.validPassword(password, user.password)) {
return done(null, false,
req.flash('loginMessage', 'Invalid pass!'));
}
return done(null, user);
})
.catch(function(err) {
return done(err);
});
}
));

顺便说一句,我对 User.validPassword() 有点困惑。对于无效密码,它是否返回 true 值?

关于node.js - bookshelf.js 不适用于 Passport ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42507243/

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