2017-07-02 3 views
2

ノードJSにログアプリケーションを構築しようとしています。ここでパスワード認証アプリは正しく動作しません。ユーザー名とパスワードを入力すると、エラーが発生してサーバーが停止します。ここで「エラー:不正な引数:文字列、未定義」ノードJSのサーバーを停止します

enter image description here

this is the error. 

は、認証部

passport.use(new LocalStrategy(
function(username, password, done) { 
    User.getUserByUsername(username, function(err, user){ 
     if(err) throw err; 
     if (!user) { 
      return done(null, false, {message: 'Unknown user'}); 
     } 

     User.comparePassword(password, user.password, function(err, isMatch){ 
      if(err) throw err; 
      if (isMatch) { 
       return done(null, user); 
      } else { 
       return done(null, false, {message: 'Invalid password'}); 
      } 
     }); 
    }); 
})); 

不明なユーザーのためのこのコードの作業のためのコードです。 ユーザー名とパスワードを比較するためには機能していません。私はここにバグを見ることができません。私はこれを解決するための助けが欲しい。

+1

を? 'user.password'が' undefined'であると不平を言うようです。 – Pointy

+0

"password"はログインのユーザー入力値です。 "user.password"はデータベースに格納されている値です。ユーザー名に応じてパスワードを参照し、ユーザーが入力した値と比較します。 –

+0

OK。 'user.password'の値は何ですか? – Pointy

答えて

0

ここで問題が見つかりました。コードに関するものではありません。

私は、同じユーザー名と異なるパスワードを持つ2人のユーザーを登録していました。ユーザー名とパスワードでログインしようとすると、このエラーが発生し、サーバーが停止しました。

ユーザーが入力したユーザー名にパスワードを検索すると厄介な状況が発生するためです。同じユーザー名のパスワードが2つあるためです。

0

私の場合、私はソーシャルサインイン/サインアップを使用しています。ユーザがソーシャル・ログイン・オプションを使用してサインアップしているとき、格納されているパスワードの値は「NULL」です。

だから、僕はこの小さなチェックを追加しました:あなたは `.comparePassword()`を呼び出すとき `password`と` user.password`の値がどのようなものがあり

comparePassword: function(password, user){ 
    if (!user.password) 
     return false; 
    return bcrypt.compareSync(password, user.password); 
    } 
関連する問題