#node.js #express #sequelize.js #instance-methods
Вопрос:
Это модель пользователя, и я хочу использовать функцию экземпляра verifyPassword из модели пользователя в контроллере входа
const {Sequelize,DataTypes} =require('sequelize') const Db =require('../config/mysql_connecton'); const bcrypt = require('bcrypt'); const User= Db.define('User', { firstName:{ type:DataTypes.STRING, allowNull:false, }, midName:{ type:DataTypes.STRING, }, lastName:{ type:DataTypes.STRING, }, email:{ type:DataTypes.STRING, allowNull:false, unique: true, validate:{ isEmail:true } }, contactNo:{ type:DataTypes.STRING, allowNull:false, unique: true }, username:{ type:DataTypes.STRING, allowNull:false, unique: true }, password:{ type:DataTypes.STRING, allowNull:false, set(value){ this.setDataValue('password',bcrypt.hashSync(value, 10)) } } }, { timestamps: true, instanceMethods: { verifyPassword: function(password) { return bcrypt.compareSync(password, this.password); } } }); Db.sync() module.exports = User;
контроллер входа в систему
здесь я использую метод экземпляра verifyPassword для проверки пароля, но получаю ошибку, как показано ниже.
const User = require('../models/user'); module.exports.login = async (req,res)=gt;{ try{ //password - confirm password check at client side const user = await User.findOne({where:{username:req.body.username}}); if(user.verifyPassword(user.password)){ console.log("kk"); } return res.sendStatus(200); }catch(err){ console.error(`Error in logging user: ${err}`); return res.sendStatus(403); } }
Я получаю следующую ошибку
ошибка: ошибка типа: user.verifyPassword не является функцией
Ответ №1:
const {Sequelize,DataTypes} =require('sequelize') const Db =require('../config/mysql_connecton'); const bcrypt = require('bcrypt'); const User= Db.define('User', { firstName:{ type:DataTypes.STRING, allowNull:false, }, midName:{ type:DataTypes.STRING, }, lastName:{ type:DataTypes.STRING, }, email:{ type:DataTypes.STRING, allowNull:false, unique: true, validate:{ isEmail:true } }, contactNo:{ type:DataTypes.STRING, allowNull:false, unique: true }, username:{ type:DataTypes.STRING, allowNull:false, unique: true }, password:{ type:DataTypes.STRING, allowNull:false, set(value){ this.setDataValue('password',bcrypt.hashSync(value, 10)) } } }, { timestamps: true, }, { instanceMethods: { verifyPassword: function(password) { return bcrypt.compareSync(password, this.password); } } }); Db.sync() module.exports = User;
Изменен формат модели… Дайте мне знать, если это сработает.
Комментарии:
1. Спасибо вам за это! но теперь я использую функцию прототипа чуть ниже Db.sync (), и теперь она работает идеально.
User.prototype.verifyPassword = function(password) { return bcrypt.compareSync(password, this.password); }
2. Хорошо. Это здорово.