2016-01-24 8 views
7

は、ここで私はすべてのアプローチを試してみましたが、ここではすべての答えを見てきましたbcryptのエラー:正体不明の不正な引数文字列

var express = require('express'), 
    app = express(), 
    mongoose = require('mongoose'), 
    bodyParser = require('body-parser'), 
    morgan = require('morgan'), 
    webToken = require('jsonwebtoken'), 
    bcrypt = require('bcryptjs'), 
    assert = require('assert'); 
    Schema = mongoose.Schema, 
    secretKey = "omjdiuwkslxmshsoepdukslsj"; 

//User Schema 
var userSchema = new Schema({ 
    username: {type: String, required: true, index: {unique:true}}, 
    password: {type: String, required: true, select: false} 
}) 

userSchema.pre('save', function(next){ 
    var user = this; 

    if(!user.isModified('password')) return next(); 

    bcrypt.hash(user.password, null, null, function(err, hash){ 
     if(err) return next(err); 

     user.password = hash; 
     next(); 
    }) 
}); 

userSchema.methods.comparePassword = function(password){ 
    var user = this; 

    bcrypt.compare(password, user.password, function(err, result){ 
     if(err){ 
      console.log(err); 
     } 
     else { 
      console.log("passwords match!"); 
      return; 
     } 
    }) 
} 

var userModel = mongoose.model('users', userSchema); 


//Connecting to Mongo 
mongoose.connect("mongodb://localhost/userstories", function(err){ 
    if(err) { 
     console.log(err); 
    } 
    else { 
     console.log("Connected to database!"); 
    } 
}); 

//Creating Token 
function createToken(user){ 
    var token = webToken.sign({ 
     _id: user.id, 
     username: user.username 
    }, secretKey,{ 
     expiresIn: 30 * 60 * 1000 
    }) 
    return token; 
    } 

//Middlewares 
app.use(bodyParser.urlencoded({extended: true})); 
app.use(bodyParser.json()); 
app.use(morgan('dev')); 

//Api's 

app.post('/signup', function(req, res){  
    var user = new userModel({ 
     username: req.body.username, 
     password: req.body.password 
    }) 

    user.save(function(err){ 
     if(err){ 
      console.log(err); 
     } 

     else{ 
      res.json({message: "User created!"}); 
     } 
    }) 
}) 

app.post('/login', function(req, res){ 

    userModel.findOne({username: req.body.username}, function(err, user){ 
     if(err) console.log(err); 

      if(!user){ 
       res.send("User not found!"); 
      } 
       else if(user){ 

         var validPassword = user.comparePassword(req.body.password); 

         if(validPassword){ 
           var tokens = createToken(user); 

           res.json({ 
            success: true, 
            message: "Successfully logged In", 
            token: tokens 
           }); 
         } 

          else { 
            res.send("Invalid password"); 
            } 

        } 
    }) 
}); 


//Running the server 
app.listen(3000, function(err){ 
    if(err) console.log("port not working"); 
    else{ 
     console.log("Everything went just fine"); 
    } 
}) 

私の完全なコードです。しかし、誰もこの不当な議論の誤りに遭遇するようには見えない。私のためにこれを理解してください私は確かに私が見ることができないバグがあります

+0

このようにエラーがありますか? – Trix

答えて

1

私は一度認証のための同じコードを試みて、同じエラーError: Illegal arguments: string, functionを得ました。

しかし、私はコードに問題は見られませんでした。つまり、同じユーザー名と異なるパスワードを持つ2人のユーザーを登録しています。次に、ユーザー名とパスワードでログインしようとしたときに、このエラーが発生し、サーバーが停止しました。

あなたは同じ問題に直面しているようです。コードにバグがないようにするには、このようなエラーがないことを確認してください。

1

また、私が使用していたときに同じエラーが発生しました bcrypt.compareSync("input to be compared with the hash", hash)

は、後に私が最初の入力パラメータすなわち(ハッシュが生成された実際の値)と第2の入力パラメータのハッシュの実際の値を渡すことになっていたことを発見し、私はハッシュを通過しました両方の入力パラメータの値。

同じことを修正した後、それは私に希望の出力をtrueまたはfalseとして与えていました。

コードhereを実行して確認することもできます。

関連する問題