À l'aide de BCrypt avec Sequelize Modèle
Je suis en train d'utiliser le bcrypt-nodejs
paquet avec mon sequelize modèle et a été tring de suivre un tutoriel pour intégrer le hachage dans mon modèle, mais j'obtiens une erreur à generateHash
. Je n'arrive pas à comprendre le problème. Est-il un meilleur moyen d'intégrer bcrypt?
Erreur:
/Users/user/Desktop/Projects/node/app/app/models/user.js:26
User.methods.generateHash = function(password) {
^
TypeError: Cannot set property 'generateHash' of undefined
at module.exports (/Users/user/Desktop/Projects/node/app/app/models/user.js:26:27)
at Sequelize.import (/Users/user/Desktop/Projects/node/app/node_modules/sequelize/lib/sequelize.js:641:30)
modèle:
var bcrypt = require("bcrypt-nodejs");
module.exports = function(sequelize, DataTypes) {
var User = sequelize.define('users', {
annotation_id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true
},
firstName: {
type: DataTypes.DATE,
field: 'first_name'
},
lastName: {
type: DataTypes.DATE,
field: 'last_name'
},
email: DataTypes.STRING,
password: DataTypes.STRING,
}, {
freezeTableName: true
});
User.methods.generateHash = function(password) {
return bcrypt.hashSync(password, bcrypt.genSaltSync(8), null);
};
User.methods.validPassword = function(password) {
return bcrypt.compareSync(password, this.local.password);
};
return User;
}
Juste une remarque: avant de déployer ce, d'essayer et d'utiliser le native bcrypt module à la place de la bcrypt-module nodejs. Cela permettra d'accélérer le hachage beaucoup parce que c'est implémenté en C++ au lieu de JavaScript.
OriginalL'auteur cphill | 2015-12-06
Vous devez vous connecter pour publier un commentaire.
Méthodes devrait être fournis dans les "options" argument de
sequelize.define
mis à jour pour utiliser bcrypt méthodes asynchrones
On dirait qu'il est important de prêter attention à la version de Sequelize vous utilisez ici (3 vs 4). Dans la v4 il y a une nouvelle façon de définir des Méthodes d'Instance sur le modèle: docs.sequelizejs.com/manual/tutorial/...
OriginalL'auteur Louay Alakkad
Autre alternative: Utilisation de crochet et de bcrypt mode asynchrone
OriginalL'auteur alditis
Il y a un tutoriel là sur la façon d'obtenir un sequelize postgreSQL/auth système de travail avec des crochets et des bcrypt.
Le gars qui a écrit le tutoriel ne pas utiliser asynchrone de hachage/sel méthodes pour quelque raison (et je vois le code affiché partout sans vraiment de réponses).
De toute façon, les heures de moi de réaliser que je ne connais pas beaucoup de promesses ou asynchrone en javascript, je pense que j'ai compris comment le gérer.
Les méthodes asynchrones sont tellement élégant et beau je me sens comme un idiot, mais quand même:
Dans la création d'un utilisateur/méthode d'instance de la section, il a utilisé le code suivant:
Des versions plus récentes de Sequelize n'aime pas les méthodes d'instance d'être déclaré de cette manière - et plusieurs personnes ont expliqué comment y remédier (y compris quelqu'un qui a posté sur le didacticiel d'origine):
Le commentaire d'origine encore utilisé les méthodes synchrones qui était un peu frustrant.
Évidemment, je suis un crétin, parce que tout ce que vous devez faire pour rendre ces fonctions système est: est-ce
Async beforeCreate bcrypt genSalt et genHash fonctions:
Pour la beforeCreate code, ce qui change littéralement rien d'autre - il semble juste de travailler.
Sur le node.js application dans le login de la route où vous vérifiez le mot de passe, il y a un findOne section:
Tout ce que vous avez à faire ici est d'ajouter les mots
async
etawait
ainsi:Si j'ai fait quelque chose de mal ici, s'il vous plaît laissez-moi savoir - merci beaucoup - espérons que cela aide quelqu'un là-bas.
OriginalL'auteur user1274820