以“正确”的方式验证用户 - 我是否需要从db访问用户密码?

时间:2017-03-22 09:22:34

标签: node.js authentication passwords

我正在尝试实现用户身份验证,在我的服务器上,我正在执行以下操作以进行登录:

从请求正文的电子邮件/密码中查询用户电子邮件/密码。所以,我的选择查询将返回类似于:

的内容

enter image description here

我在通过bcrypt运行密码后存储密码。现在,如果来自req.body的用户密码是“kittycats”,我是否应该使用bcrypt的比较在req.body.passworddb.password之间进行比较?

我对这种东西不熟悉,所以我不知道这是否是一种“好习惯”,或者我是否完全错了。

由于

2 个答案:

答案 0 :(得分:0)

是比较功能允许使用存储的哈希验证密码。实际上我不熟悉node.js库,但我认为这是API文档:

https://github.com/kelektiv/node.bcrypt.js#to-check-a-password

compare函数与任何其他BCrypt库一样,它从存储的哈希中提取salt和成本因子,并根据密码计算可比较的哈希值。然后它检查存储的散列和计算的散列是否相同。

答案 1 :(得分:0)

您可以使用passport.js.

来实现它

您可以在passport.js中设计本地策略以进行身份​​验证。有一个NPM包可用于此。请查看passport-local

从您的问题来看,您似乎正在使用SQL数据库。我不确定如何使用SQL数据库使用护照。有一个thread谈到将护照与SQL一起使用。请检查一下。

我可以告诉你我如何使用带有猫鼬的passport.js。

//我的用户模型:

var mongoose = require('mongoose');
var passportLocalMongoose = require('passport-local-mongoose');
var Schema = mongoose.Schema;

var userSchema = new Schema({
    username: String,
    password: String
});

userSchema.plugin(passportLocalMongoose);

var User = mongoose.model('user', userSchema);
module.exports = User;

//在app.js中添加此内容

var express = require('express');
var app = express();
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var User = require('/path/to/user/model');

passport.use('user', new LocalStrategy(User.authenticate()));
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());

app.post('/register', function(req, res){
    User.register(new User({
        username: req.body.username
      }),
      req.body.password,
      function(err, user) {
          passport.authenticate('local')(req, res, function() {
            return res.status(200).json({
              success: true,
              message: 'Registration Successful!'
            });
      });
    );
});

app.post('/login', function(req, res){
    passport.authenticate('user', function(err, user, info) {
      if (err) {
       //handle err
      }
      if (!user) {
        //user not found
      }
      req.logIn(user, function(err) {
        if (err) {
          //handle err
        }

        //Login successful! 
      });
    })(req, res, next);
});

希望你觉得它很有用!