我有一个简单的‘.’‘.’‘我尝试了我在网上找到的所有解决方案。请帮帮忙。
config/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);
});
}
));
...路线/创作.
...
router.post('/login', passport.authenticate('local-login', {
successRedirect: '/users/profile',
failureRedirect: '/auth/login',
failureFlash: true
}));
...server.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);
...发布于 2017-02-28 13:03:08
我认为这里的主要问题是then()的使用。它不使用err参数作为传统回调。
另一个小问题是,catch()应该将错误转发到护照,而不是仅仅记录它。
所以试着把它改为
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()弄糊涂了。它是否返回无效密码的真值?
https://stackoverflow.com/questions/42507243
复制相似问题