我是MEAN开发的新手,我正在使用bcrypt来加密来自UserSchema的密码(一切都有奇迹),但由于我必须从客户端进行身份验证,我已经为UserSchema创建了一个函数:
UserSchema.methods.comparePassword = function(candidatePassword, cb) {
bcrypt.compare(candidatePassword, this.password, function(err, isMatch) {
if (err) return cb(err);
cb(null, isMatch);
});
};
现在..如何从客户端调用此功能?我正在使用Restangular,我正在尝试这样的事情:
function authLogin() {
if(vm.user && vm.user.email && vm.user.password){
User.getList({ email: vm.user.email }).then(function(user){
user.comparePassword(vm.user.password, function(err, isMatch) {
if (err) throw err;
console.log(vm.user.password, isMatch);
});
});
}}
但后来发生一个错误,说用户没有功能:
user.comparePassword不是函数
那么,它有什么问题呢?或者无法直接从客户端调用Schema函数?
1 回答
我相信你的直接问题的答案(如果我理解你的哪些代码样本存在于哪一层):为什么“不可能直接从客户端调用Schema函数”是服务器和客户端javascript运行在一个完全不同的上下文,因此您可能在服务器端模型或中间件中声明的功能对您的客户端上下文不可用 .
使用节点和javascript框架从客户端“调用模式函数”的一般解决方案是将POST或GET数据发送到服务器端API endpoints ,然后在API代码(或附加到该API的中间件)中调用模式方法终点) .
我建议您查看https://www.npmjs.com/package/passport passport身份验证API模块,这是一种处理客户端身份验证的市场标准方法,您应该可以很容易地将其绑定到您的应用程序上 .