2016-06-26 9 views
1

パスワードを作成して保存する前にパスワードをハッシュしようとしています。しかし、以下のように私のフックを定義すると、ログは元のパスワードでゲストインスタンスを作成し、すぐにそれを更新することに気付きました。なぜ私は分からない。私は実際には別のファイルSequelize beforeCreateフック内ですぐに保存するには?

//.. 

const email = req.body.email; 
const password = req.body.password; 

Guest.findOne({ where: { email: email }}) 
    .then(function(existingUser) { 

    if (existingUser) { 
     return res.status(422).send({ error: 'Email is already in use'}) 
    } 

    Guest.create({ 
     email: email, 
     password: password 
    }).then(function(guest) { 
     res.json({ token: tokenForGuest(guest) }); 
    }); 

    }); 

でインスタンスを作成するのはここ

// define model 

const Guest = sequelize.define('guest', { 
    email: { 
    type: Sequelize.STRING, 
    allowNull: false, 
    }, 
    password: { 
    type: Sequelize.STRING, 
    allowNull: false, 
    } 
}); 

Guest.beforeCreate(function(guest) { 
    bcrypt.genSalt(10, function(error, salt) { 
    if (error) { return error } 
    bcrypt.hash(guest.password, salt, null, function(error, hash) { 
     if (error) { return error } 
     guest.password = hash; 
     guest.save(); 
    }) 
    }) 
}); 

は(提供されたパスワードを作成し、その後で更新していない私はこれを行うときしかし、それはすぐにこのパスワードを使用してインスタンスを作成します)私が設定していること:

Guest.beforeCreate(function(guest) { 
    guest.password = 'TEST'; 
    }); 

は、ここで私が取得しています私のサーバーのログです:

Executing (default): SELECT "id", "email", "password", "createdAt", "updatedAt" 
FROM "guests" AS "guest" WHERE "guest"."email" = '[email protected]' LIMIT 
1; 

Executing (default): INSERT INTO "guests" 
("id","email","password","createdAt","updatedAt") VALUES 
(DEFAULT,'[email protected]','passwordsecret123','2016-06-26 16:26:54.683 
+00:00','2016-06-26 16:26:54.683 +00:00') RETURNING *; 
::1 - - [26/Jun/2016:16:26:55 +0000] "POST /signup HTTP/1.1" 200 133 "-" 
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_0) AppleWebKit/537.36 (KHTML, like 
Gecko) Postman/4.2.2 Chrome/47.0.2526.73 Electron/0.36.2 Safari/537.36" 

Executing (default): UPDATE "guests" SET 
"password"='$2a$10$VsU97hLMxZ76zGmNfJVlfOeXayyFbGMKK/EwE3SvKhOOEi9oAm9Qy',"updated 
At"='2016-06-26 16:26:55.428 +00:00' WHERE "id" = 20 

すべてのご協力をいただければ幸いです。ありがとう!

答えて

1

はい

Guest.beforeCreate(function(guest, options, done) { 
    bcrypt.genSalt(10, function(err, salt) { 
     if (err) return done(err); 
     console.log('Salt: ' + 'getting ' + salt); 
     bcrypt.hash(guest.password, salt, null, function(err, hash) { 
      if (err) return done(err); 

      console.log('Info: ' + 'getting ' + hash); 

      guest.password = hash; 

      console.log('Info: ' + 'password now is: ' + guest.password); 

      return done(null,guest); 
     }); 
    }); 
}); 
+0

を試してみてください!!ありがとうございました。私は "復帰した(...)"の部分を見逃したように見えます。なぜこれが機能していないのかを理解しようとした時間を費やして助けてくれたことを感謝します:) – hidace

関連する問題