默认情况下,我们通过User.create({ email, password, nickname });模型传入的数据,是无加密的,也就是说,在数据库中密码是明文显示的,这样肯定是不行,我们需要使用bcrypt插件进行加密

yarn add bcryptjs  --dev

打开models/user.js

user.js:

const bcrypt = require("bcryptjs");
const { sequelize } = require(`${process.cwd()}/core/db`);
const { Sequelize, Model, DataTypes } = require("sequelize");


class User extends Model {

};

User.init({
  id: {
    type: DataTypes.INTEGER,
    primaryKey: true, //主键
    autoIncrement: true, //自增
  },
  nickname: DataTypes.STRING,
  email: {
    type: DataTypes.STRING(128),
    unique: true, //唯一
  },
  password: {
    type: DataTypes.STRING,
    set(val) {
      console.log(val)
      const salt = bcrypt.genSaltSync(10);
      const psw = bcrypt.hashSync(val, salt);
      this.setDataValue('password', psw);
    }
  },
  openid: {
    type: DataTypes.STRING(64),
    unique: true, //唯一
  },
}, {
  sequelize,
  tableName: "user", //指定生成的表名
});


module.exports = {
  User
}

password有一个set方法,有set自然有get,这个以后再说,set接受一个参数,就是你要设置的值,我们将其加密后,通过this.setDataValue('password', psw);进行保存,一定要传入第一个参数,也就是你要设置的字段名,虽然是在password属性下,但是还是要设置,否则数据库中保存不了这个值。

保存后我们进行注册,可以看到如下内容:

这样一个加密就做好了。

分类: Node 标签: nodekoabcryptjs

评论

暂无评论数据

暂无评论数据

目录