gpt4 book ai didi

node.js - 身份验证未调用策略

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

我是 Node 新手,正在尝试使用 Passport.js 进行简单的本地登录并运行。在我看来,调用身份验证函数时,我设置的策略并未运行。

       module.exports = function(app) {
var mongo = require('./mongoose-db.js');
var brands = require('./app/brands.js');

// brand admin page //

var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;

passport.use(new LocalStrategy( {//this is a strategy but why is it not being run?
usernameField: 'admin_username',
passwordField: 'admin_password'
},
function(username, password, done) {console.log('here 7');
process.nextTick(function () {
console.log('here 8');
// Find the user by username. If there is no user with the given
// username, or the password is not correct, set the user to `false` to
// indicate failure and set a flash message. Otherwise, return the
// authenticated `user`.
mongo.findAdminByUsername(username, function(err, user) { console.log('here 9');
if (err) { return done(err); }
if (!user) { return done(null, false, { message: 'Unknown Admin ' + username }); }
if (user.password != password) { return done(null, false, { message: 'Invalid password' }); }
return done(null, user);
})
});
}
));


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

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

app.get('/brand_admin', function(req, res){
console.log('here 1');
res.render('admin_login', { user: req.user, message: req.session.messages });
});


app.post('/brand_admin', function(req, res, next) {
console.log('USER: ');
console.log(req.user);
res.send('ok');
passport.authenticate('local', function(err, user, info) {
console.log(user);
if (err) { return next(err) }
if (!user) {console.log(req.session.messages);
req.session.messages = [info.message];
console.log('here 4');
console.log(req.session.messages);
return res.redirect('/brand_admin')
}
console.log('here 5');
req.logIn(user, function(err) {
if (err) { return next(err); console.log('here 6');}
return res.redirect('/');
});
})(req, res, next);
});

ejs 是:

<body>

<head> Admin Login </head>

<form id="brand_edit" action="/brand_admin" method="post" >
<fieldset>

Login: <input type="text" name="admin_login" > <br>

Password: <input type="password" name="admin_password" >

<input type="submit" name="action" value="Login"/>

</fieldset>

<a href="">Forgotten your password?</a>

</form>

</body>

我从表单提交中得到的输出是:

Steve
agrgegerfe
{ id: 1,
username: 'Steve',
password: 'agrgegerfe',
email: 'bob@example.com' }
false
undefined
here 4
[ 'Missing credentials' ]
here 1

策略没有运行,但我不明白为什么?有人可以帮忙吗?可能影响此问题的一件事是我在应用程序的另一部分使用 Passport 进行 Facebook 登录..

最佳答案

我认为你没有正确调用 Passport 。它需要位于路由链中。试试这个:

// configure passport with the correct fieldspassport.use(new LocalStrategy({  usernameField: 'admin_login',  passwordField: 'admin_password'}, function (username, password, done) {  ...});app.post('/brand_admin', passport.authenticate('local'), function (req, res) { // req.user is now defined console.log(req.user); res.send('ok');}); 

关于node.js - 身份验证未调用策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17746715/

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