简体   繁体   English

无法注册密码加密

[英]Cannot register with password encrypt

i follow this question but i still didn't figure out how to solve it, it says to use instanceMethods option to use the methods in the model thats exactly what i did: 我遵循这个问题,但是我仍然不知道如何解决,它说使用instanceMethods选项来使用模型中的方法,这正是我所做的:

"use strict";
var sequelize = require('./index');
var bcrypt = require('bcrypt-nodejs');

module.exports = function (sequelize, DataTypes) {
  var User = sequelize.define("User", {
    username: DataTypes.STRING,
    email: DataTypes.STRING,
    password: DataTypes.STRING
  }, {
      instanceMethods: {
        generateHash: function (password) {
          console.log("hi");
          return bcrypt.hashSync(password, bcrypt.genSaltSync(8), null);
        },
        validPassword: function (password) {
          return bcrypt.compareSync(password, this.password);
        }
      },


    });



  return User;
}

after i use that i tried to test it generating a password hash on my register route like this: 在我使用它之后,我尝试对其进行测试,以在我的注册路由上生成一个密码哈希,如下所示:

var express = require('express');
var User = require('../../models').User;
var router = express.Router();

/* GET users listing. */
router.post('/', function (req, res, next) {

  if (JSON.stringify(req.body) == "{}") {
    return res.status(400).json({ Error: "Register request body is empty" });
  }
  if (!req.body.email || !req.body.username || !req.body.password) {
    return res.status(400).json({ Error: "Missing fields for registration" });
  }



  var password = User.instaceMethods.generateHash(req.body.password);

  User.create({
    username: req.body.username,
    email: req.body.email,
    password: password
  }).then(function () {
    return res.status(200).json({message: "user created"});
  })

});

module.exports = router;

with this when i go to my /register, i don't get any response even a console.log in the password doesn't show me anything i tried to see if it enters the generetehash but, it doesn't enter the method, what is going wrong here? 与此有关,当我转到/ register时,即使是console.log也没有任何响应。密码中的密码没有显示任何我尝试查看是否输入generetehash的信息,但未输入方法,这是怎么了?

Add your generateHash as a classMethod of your model, not an instance method. 将您的generateHash添加为模型的classMethod,而不是实例方法。

var User = sequelize.define('user', {
  ....
}, {
  classMethods: {
    generateHash: function() {
      ...
    }
})

Because you don't have an instance yet, not before User.create() . 因为您还没有实例,所以不在User.create()之前。

Then you can call it using User.generateHash() 然后可以使用User.generateHash()调用它

And also you should catch (and probably at least log) sequelize exceptions. 而且您还应该捕获(并且可能至少记录)sequelize异常。 Add

.catch(function(err){
  console.log(err)
})

after your then() then()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM