2017-02-01 3 views
0

사용자 입력 암호 해시를 시도하고 있지만 데이터베이스 또는 실제 모델 자체에 대한 게시 요청을 처리하는 경로에서이 작업을 직접 수행해야하는지 확실하지 않습니다. 나는 문서에서 bcrypt 코드를 사용하고, 나는 다음과 같은 코드에 함수에 전달해야처럼 보인다 :sequelize와 함께 bycryptJS 사용

bcrypt.genSalt(10, function(err, salt) { 
    bcrypt.hash("B4c0/\/", salt, function(err, hash) { 
     // Store hash in your password DB. 
    }); 
}); 

나는 현재이 내 라우터 파일에 설정했습니다.

module.exports = function(sequelize, DataTypes){ 
    var users = sequelize.define('users', { 
     name: DataTypes.STRING, 
     username: DataTypes.STRING, 
     password: DataTypes.STRING, 
     email: DataTypes.STRING, 
     description: DataTypes.STRING 
    }); 
    return users; 
} 

답변

1

router.post('/friend-book/register', function(req, res){ 

      db.users.create(req.body).then(function(data){ 
       console.log("register data", data); 

       console.log("poop", data.id); 
       req.session.user = { 
        id: data.id, 
        name: data.name, 
        username: data.username, 
        email: data.email, 
        description: data.description 
       }; 

       bcrypt.genSalt(10, function(err, salt) { 
        bcrypt.hash(req.body.password, salt, function(err, hash) { 
         // Store hash in your password DB. 
        }); 
       }); 

       res.render("profile", req.session.user); 

      }); 
}); 

내 모델은 그래서 그래서 같은 beforeCreate 후크 내부의 해시 기능을 넣어. 이 bcrypt의 C++ 구현이 훨씬 빠르고으로

module.exports = function(sequelize, DataTypes) { 
    var User = sequelize.define('User', { 
    email: { type:DataTypes.STRING, validate: { isEmail: true}, required: true, unique: true}, 
    password: { type:DataTypes.STRING, required: true} 
    }, { 
    underscored: true, 
    classMethods: { 
     associate: function(models) { 
     // associations can be defined here 
     } 
    }, 
    instanceMethods: { 
    }, 
    hooks: { 
     beforeCreate: function(user, options) { 
      return new Promise((resolve, reject) => { 
      bcrypt.hash(user.password, 8, (err, data) => { 
       if (err) reject(err); 
       user.password = data; 
       resolve(); 
      }) 
      }); 
     } 
     } 
    }); 
    return User; 
}; 

한 가지, 나는 bcrypt 모듈 대신 bcrypt-JS를 사용 (항상 사용합니다).

+0

그래, 고마워, 내가 조사 할 것이지만,이 쿼리가 호출되는 경로에서 beforeCreate 함수를 호출해야합니까, 아니면 프로그램이 sequelize create를 수행 할 때 beforeCreate가 자동으로 호출 될까요? – henhen

+0

그리고 새로운 Promise를 사용하고 있기 때문에 데이터를 then() 함수에 전달하지 않아도되며 여기서 user.password = data를 수행 할 수 있습니까? – henhen

+0

새 사용자가 생성되기 전에 자동으로 호출됩니다. 원하지 않으면 데이터를 전달할 필요가 없습니다. –