2017-05-14 23 views
0

私はデータベースをセットアップするためにsequenizeでnodejsを使用していますが、現在私はパスワードをハッシュしようとしています。ハッシングはすでに行っていますが、ハッシュされたものとreq.bodyに送るので、私はこれをしなかった:bcryptで有効なパスワードを取得

router.post('/', function (req, res, next) { 
    console.log("hi"); 
    if (JSON.stringify(req.body) == "{}") { 
    return res.status(400).json({ Error: "Login request body is empty" }); 
    } 
    if (!req.body.username || !req.body.password) { 
    return res.status(400).json({ Error: "Missing fields for login" }); 
    } 

    var password = User.validPassword(req.body.password); 


    // search a user to login 
    User.findOne({ where: { username: req.body.username, password: password } }) // searching a user with the same username and password sended in req.body 
    .then(function (user) { 
     if (!user) { 
     return res.status(400).json({ Error: "There is no user with those fields" }); // if there is no user with specific fields send 
     } 
     return res.status(400).json({ Error: "loged in!" }); // username and password match 
    }).catch(function (err) { 
     return res.status(200).json({ message: "server issues when trying to login!" }); // server problems 
    }); 
}); 

私のモデルは、このようなものです:

"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 
    }, { 
     classMethods: { 
     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; 
} 

私は

012からの応答を得ることはありません

私はconsole.logにしようとしましたが、応答がありません。ルータ/ログインしようとすると、すべての時間、任意の輻輳が読み込まれます。

答えて

1

あなたのルートは、/ではない投稿アクションを/loginと定義しています。あなたはまだフロントエンドを持っていない場合、郵便配達を使ってそれを試すことができます。

あなたはあなたの中にもこの

よう
router.post('/', function (req, res, next) { 
    console.log("hi"); 
    if (JSON.stringify(req.body) == "{}") { 
    return res.status(400).json({ Error: "Login request body is empty" }); 
    } 
    if (!req.body.username || !req.body.password) { 
    return res.status(400).json({ Error: "Missing fields for login" }); 
    } 

    // search a user to login 
    User.findOne({ where: { username: req.body.username } }) // searching a user with the same username and password sended in req.body 
    .then(function (user) { 
     if(user && user.validPassword(req.body.password)) { 
     return res.status(200).json({message: "login successful"}); 
     } else { 
     return res.status(401).json({message: "Unauthorized"}); 
     } 

    }).catch(function (err) { 
     return res.status(200).json({ message: "server issues when trying to login!" }); // server problems 
    }); 
}); 

をコードのこの部分を書かれている必要がありますのでvalidPassword方法は、Userモデルのインスタンスで呼び出されるべきですが、方法をキャッチし、ステータスコードが示されている何かをする必要があります500のような内部サーバーエラーです。 200は不適切です。私はbasicly問題は、私はメソッドはインスタンスではなくモデルトラフアセスしたいという事実に関連して、フェミOladejiの助けを借りて、自分の質問に答えることができるように

+0

を扱う作業をすることはできませんinstanceMethods、そこでは、ルーティングで/は私が郵便配達のいずれかの結果を得ることはありません –

+0

ログインするapp.useを使用しているためであります –

+0

はコンソールにログされた "hi"です –

-2

スヨンらしいです。

私はユーザーインスタンスでアクセスしようとしましたが、インスタンスを扱うメソッドがなかったので、モデルにいくつかの変更が加えられました。

"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 
    }, { 
     classMethods: { 
     generateHash: function (password) { 
      return bcrypt.hashSync(password, bcrypt.genSaltSync(8), null); 
     }, 

     }, 
     instanceMethods: { 
     validPassword: function (password) { 
      console.log(password, this.password) 
      return bcrypt.compareSync(password, this.password); 
     } 
     } 


    }); 



    return User; 
} 

と、まだインスタンス:)

+0

ありがとうございました。 「I」は常に英語の大文字であることに注意してください。 sequelizeのクラスメソッドとinstanceMethodsのV4で – peterh

+0

User.prototype.validPassword =機能を支持して非難されている(){}とUser.associate =関数(){} ---ここでドキュメントを表示します。http://docs.sequelizejs。 com/manual/tutorial/upgrade-to-v4.html#breaking-changes –

関連する問題