使用 sailsjs 护照身份验证本地策略既不会给出任何错误,也不会对用户进行身份验证
Using sailsjs passport Authentication Local strategy is neither giving any error nor authenticating the user
我正在尝试在此博客之后的项目中实施护照本地策略。我已经在配置中创建了护照js文件。
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
};
现在,当我尝试从我的身份验证控制器调用本地策略时,作为
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("用户身份验证...."+用户名+'和'+密码);
也从未执行过。我也没有收到任何错误.谁能建议我哪里弄错了。
更新:I在此堆栈问题中发现"如果未提供'电子邮件'或'密码',护照就会自动失败。我想一些文档会很有用!."但是作为控制台日志语句,给我用户名和密码(在注册块中)
console.log("before authenticated");
console.log("username="+username);
console.log("password="+password);
所以我相信情况并非如此。谢谢
您是否创建了一个策略文件来说明要对哪些控制器操作进行身份验证?Passport 没有拒绝访问控制器的策略。为此,您必须创建另一个策略。
看看这个答案:护照认证在Sails JS应用程序中不起作用
如果这没有帮助,请告诉我。
相关文章:
- 类型错误:对象 #<对象> 没有方法“身份验证”
- Twitter搜索API身份验证错误
- Angular2 谷歌身份验证,按钮渲染上的类型错误
- 使用 sailsjs 护照身份验证本地策略既不会给出任何错误,也不会对用户进行身份验证
- (IONIC)错误: [$injector:unpr] 未知提供程序: 数据服务提供程序 <- 数据服务<- 身份验证控
- React 原生 Firebase 身份验证错误处理
- 使用 $.post 对用户进行身份验证以返回自定义错误/成功消息
- 使用电子邮件和密码错误对用户进行身份验证
- 身份验证-$http'调用了s.then()成功回调,而不是错误回调
- 推特:仅应用程序身份验证错误访问控制允许原点不允许原点为null
- Gapi 的身份验证弹出窗口立即关闭,并失败并显示 401 错误
- 推送器:“;未捕获的类型错误:无法调用方法'scopedTo'未定义的“;进行身份验证时
- '不是列入白名单的来源'Azure移动服务身份验证错误
- Passportjs获得身份验证错误消息
- Google身份验证导致origin_mismatch错误
- AngularFire(Angular+Firebase)身份验证错误延迟
- Google联系人API错误:通过脚本加载请求超时.可能的原因:源URL不正确;提要需要身份验证
- sencha touch 2-使用摘要身份验证用户名和密码时,javascript中出现错误
- 错误:无效登录535 5.0.0身份验证失败
- QuickBlox QB.chat.connect给出令人困惑的身份验证错误代码401