2016-01-24 13 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 मिला है।

लेकिन मुझे कोड के साथ कोई समस्या नहीं दिखाई दे रही थी। बात यह है कि, मैंने दो उपयोगकर्ता को एक ही उपयोगकर्ता नाम और एक अलग पासवर्ड के साथ पंजीकृत किया था। फिर, जब मैंने उपयोगकर्ता नाम और एक पासवर्ड से लॉग इन करने का प्रयास किया तो यह त्रुटि हुई और सर्वर को रोक दिया।

तो ऐसा लगता है कि आपको भी एक ही समस्या का सामना करना पड़ रहा है। सुनिश्चित करें कि अगर आप अपने कोड में कोई बग नहीं चाहते हैं तो इस सामान के साथ कोई त्रुटि नहीं है।

1

मुझे भी उसी त्रुटि का सामना करना पड़ा जब मैं bcrypt.compareSync("input to be compared with the hash", hash) का उपयोग कर रहा था।

बाद में मुझे पता चला कि मुझे पहले इनपुट पैरामीटर यानी वास्तविक मूल्य (हेश उत्पन्न हुआ वास्तविक मूल्य) और दूसरे इनपुट पैरामीटर में हैश में वास्तविक मान पास करना था, लेकिन मैं शेड पास कर रहा था इनपुट पैरामीटर दोनों में मूल्य।

इसे ठीक करने के बाद यह मुझे वांछित आउटपुट को सच या गलत के रूप में दे रहा था।

आप अपना कोड here भी चला सकते हैं और देख सकते हैं।

संबंधित मुद्दे