2017-11-23 15 views
0

ユーザーはDBに作成され、コードが何度もチェックされ、構文エラーはなく、ユーザーが作成されていても定義されていません。名前とパスワードでリクエストをポストするときは、資格情報を正しく入力する必要があります。コード:mongoDBで見つからないユーザーを認証できません

var mongoose = require("mongoose"); 
    var Schema = mongoose.Schema; 

var User = new Schema({ 
     name: String, 
     password: String, 
    admin: Boolean 
}); 

var Usermodel = mongoose.model("user", User); 
module.exports = Usermodel; 

router.post('/authenticate', function(req, res) { 

    // find the user 
    user.findOne({ 
    name: req.body.name 
    }).then(function(err, user) { 
    console.log(user); 
    if (err) throw err; 

    if (!user) { 
     res.json({ success: false, message: 'Authentication failed. User not found.' }); 
    } else if (user) { 

     // check if password matches 
     if (user.password != req.body.password) { 
     res.json({ success: false, message: 'Authentication failed. Wrong password.' }); 
     } else { 

     // if user is found and password is right 
     // create a token with only our given payload 
    // we don't want to pass in the entire user since that has the password 
    const payload = { 
     admin: user.admin 
    }; 
     var token = jwt.sign(payload, 'superSecret', { 
      expiresIn: 60*60*24 // expires in 24 hours 
     }); 

     // return the information including token as JSON 
     res.json({ 
      success: true, 
      message: 'Enjoy your token!', 
      token: token 
     }); 
     } 

    } 

    }); 
}); 

必要なすべての依存関係、私はちょうどif文は、私が作成したユーザーを見つけていないとはconsole.logリターンは未定義、コンソールにすべてのエラーを得ることはありません。私はここに何かを逃していますかこれは意味をなさない。コールバックを約束に変えたが、それでも変わらない。 DBでユーザーを探すときに間違っているような気がします。私はfind({})を試みましたが、運はありませんでした。

+0

あなたはMongoのコンソールからそれを見つけることができすべきですか? –

+1

約束しているmongoose findOneでは、then句でのみdocを取得します。また、exec()を使用することをお勧めします。 – tumulr

+0

@MustafaMamun私はmongoコンソールの代わりにRobo 3Tを使用していますが、コンソールでも見ることができます。 – Limpuls

答えて

0

あなたはuser.findを使用しているので、あなたのユーザ変数はどこですか?どこで宣言しましたか?あなたはUsermodel

をユーザーのスキーマモデルを割り当てる

あなたのクエリがUsermodel.findOne({name:req.body.name})

+0

Usermodelはuser.jsという別のファイルにあるので、私はapi.jsルート文書にそれを要求し、それをuser変数に割り当てます。それがユーザーが来る場所です。 – Limpuls

+0

間違った変数を使用していた場合、私は未定義のエラーが出ると思います。これは次のようになります: 'var user = require(" ../ models/user ");' – Limpuls

関連する問題