gpt4 book ai didi

javascript - 使用 sailsjs Passport 身份验证本地策略既不会给出任何错误,也不会对用户进行身份验证

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

我正在尝试在我的项目中实现 Passport 本地策略 blog 。我已经在 config 中创建了 Passportjs 文件。

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

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

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

passport.use(new LocalStrategy({
usernameField: 'username',
passwordField: 'password'
},
function(username, password, done) {
console.log("User Authenticating...." + username + 'and' + password);
User.findOne({
username: username
}).exec(function(err, user) {
if (err) {
return done(err);
}
if (!user) {
return done(null, false, {
message: 'Unknown user ' + username
});
}
if (user.password != password) {
return done(null, false, {
message: 'Invalid password'
});
}
return done(null, user);
});
}
));

我已经按照建议更新了 httpjs

  middleware: {

passportInit : require('passport').initialize(),
passportSession : require('passport').session(),

order: [
'startRequestTimer',
'cookieParser',
'session',
'passportInit',
'passportSession',
'myRequestLogger',
'bodyParser',
'handleBodyParserError',
'compress',
'methodOverride',
'poweredBy',
'router',
'www',
'favicon',
'404',
'500'
]
}

/***************************************************************************
* *
* The number of seconds to cache flat files on disk being served by *
* Express static middleware (by default, these files are in `.tmp/public`) *
* *
* The HTTP static cache is only active in a 'production' environment, *
* since that's the only time Express will cache flat-files. *
* *
***************************************************************************/

// cache: 31557600000
};
现在,当我尝试从我的身份验证 Controller 调用本地策略时

login: function (req, res) {
var user = req.body.user;

// check user
if (!user) {
//send bad request
return res.status(500).json({payload : {}, message : "Undefined user"});
}

var username = (user.username !== undefined)? user.username : false;
var password = (user.password != undefined)? user.password : false;

// Grab user fields.
if (!username || !password) {
//send bad request
return res.status(400).json({payload : {}, message : "Invalid username or password"});
}
console.log("before authenticated");
console.log("username="+username);
console.log("password="+password);
passport.authenticate('local', function(err, user, info) {
console.log("User Authenticated");
if (err) {
console.log("error=errpr");
return res.status(400).json({payload : {error: err}, message : info.message});
}

if (!user) {
console.log("error=user");
return res.status(400).json({payload : {error: err}, message : info.message});
}
console.log("User Authenticated2");
_authTokenRequestCb(user,req,res);

})(req,res);
},

它从不验证 Paasportjs 中的用户和控制台日志语句。

console.log("User Authenticating...."+username+'and'+password);

也从未执行过。我也没有收到任何错误。任何人都可以建议我哪里出错了。

更新:我在这个stack question中找到了“如果没有提供‘电子邮件’或‘密码’, Passport 就会自动失败。我想一些相关文件会很有用!”但作为控制台日志语句给我用户名和密码(在寄存器 block 中

console.log("before authenticated");
console.log("username="+username);
console.log("password="+password);

所以我确信情况并非如此。谢谢

最佳答案

您是否创建了一个策略文件来说明要验证哪些 Controller 操作? Passport 没有拒绝访问 Controller 的策略。为此,您必须创建另一个策略。

看看这个答案:Passport authentication not working in Sails JS application

如果这没有帮助,请告诉我。

关于javascript - 使用 sailsjs Passport 身份验证本地策略既不会给出任何错误,也不会对用户进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28139894/

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