Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果不使用PassportJS,从安全角度来看,我会错过什么吗?_Javascript_Node.js_Passport.js_Restify - Fatal编程技术网

Javascript 如果不使用PassportJS,从安全角度来看,我会错过什么吗?

Javascript 如果不使用PassportJS,从安全角度来看,我会错过什么吗?,javascript,node.js,passport.js,restify,Javascript,Node.js,Passport.js,Restify,我正在NodeJS中创建一个后端,它将使用散列密码注册一个用户以保存在我们的数据库中。当用户想要使用创建的密码登录时,我使用散列密码,然后使用bcrypt的compareSync 对于这种情况,我并不认为使用Passport本地策略有什么意义,因为我在本地中间件中所做的唯一一件事就是使用bcrypt的compareSync来查看密码是否相同,我可以在我自己的中间件中轻松地做到这一点,并编写中间件来包含我想要的内容 我现在使用的Passport中间件代码是: passport.use(new pa

我正在NodeJS中创建一个后端,它将使用散列密码注册一个用户以保存在我们的数据库中。当用户想要使用创建的密码登录时,我使用散列密码,然后使用bcrypt的compareSync

对于这种情况,我并不认为使用Passport本地策略有什么意义,因为我在本地中间件中所做的唯一一件事就是使用bcrypt的compareSync来查看密码是否相同,我可以在我自己的中间件中轻松地做到这一点,并编写中间件来包含我想要的内容

我现在使用的Passport中间件代码是:

passport.use(new passportLocal(function (username, password, done) {
  r.table('user').filter({username: username}).limit(1).run()
    .then(function (doc) {
       if (doc._data && doc._data.length === 1) {
         var data = doc._data[0][0];
         if (data.password) {
           if (bcrypt.compareSync(password, data.password)) {
             done(null, data);
           } else {
             done(null, false, {message: 'Invalid username or password'})
           }
         } else {
           done(null, false, {message: 'The user does not exist'});
         }
       } else {
         done(null, false, {message: 'Invalid username or password'})
       }
   })
  .catch(function (err) {
    console.error(2222, err);
    done(err);
  });
}));

所以问题是,如果我错过了Passport提供的一些安全功能,而不是创建自己的中间件,用bcrypt检查密码?

简单地说,Passport.Js可以轻松地集成第三方登录。如果将来可能需要添加这些服务之一,您应该使用它

如果您不打算使用任何第三方登录服务,那么就node.js而言,熟悉一个基本上已成为认证行业标准的库可能仍然有好处


也就是说,您没有理由不能使用自己的自定义身份验证脚本提供同等的服务。

Ouch。那个金字塔…:SPassport只是方便,不一定会增加额外的安全性。因此,如果您以正确的方式实现中间件,您不会错过任何东西。本地策略的“安全”部分是您的bcrypt。护照根本不能给你任何安全感。但是,如果不使用passport,您将无法使用方便的模式(
passport.authenticate()
)或扩展以使用其他身份验证提供程序,而无需进行重大重构。老实说,我认为您的代码问题可以通过适当的关注点分离来解决,与passport无关。谢谢@robertklep=)@DanPantry您能详细说明我应该做什么分离吗?