2017-11-15 18 views
0

Express、sequelize、およびmysqlでNodeJS認証を実装しようとしていますが、ブロックされています。私はwebserviceによってログインとパスワードの値を取得します。データベース値と一致させたい:Authentification NodeJS Sequelize Express

app.get('/login', function (req, res, err) {   
    var whereUser = { 
     login: req.query.login, 
     password: req.query.password 
    }  

    if (!req.query.login || !req.query.password) { 
     res.send('login failed'); 
//Here my code is wrong ! 
I try to compare login and password values with database login and passwword values   
      } else if (req.query.login && req.query.password == UsrPerson.findOne({ where: whereUser })) {   
       console.log("auth ok") 
       req.session.user = "amy"; 
       req.session.admin = true;   
       res.send("login success!"); 
      } else { 
       console.log("ERROR") 
       res.send(err) 
      } 
     }); 

どうすればいいですか?ありがとうございます

答えて

1

findOneメソッドは、モデルのインスタンスオブジェクトを返します。 これは、passwordとインスタンスを比較できないことを意味します。

第2の問題は、findOneメソッドが非同期であることです。awaitとそれにはasyncメソッドが必要です。

app.get('/login', async function (req, res, err) {   
    var whereUser = { 
     login: req.query.login, 
     password: req.query.password 
    }  

    if (!req.query.login || !req.query.password) { 
     res.send('login failed'); 
    } else {   
     // The following code return an instance of the user if it was found. 
     const user = await UsrPerson.findOne({ where: whereUser })) 

     // If the user was not found that means the credentials was wrong. 
     if (user) { 
      console.log("auth ok") 
      req.session.user = "amy"; 
      req.session.admin = true;   
      res.send("login success!"); 
     } else { 
      console.log("ERROR") 
      res.send(err) 
     } 
    } 
}); 
1
app.get('/login', function (req, res, err) {  
    const { login, password } = req.query; 

    UsrPerson 
    .findOne({ 
     where: { 
     login: login, 
     password: password 
     } 
    }) 
    .then((foundUser) => { 
     if(!foundUser){ 
     res.send('login failed'); 
     } else { 
     console.log("auth ok"); 
     req.session.user = "amy"; 
     req.session.admin = true; 
     res.send("login success!"); 
     } 
    }) 
    .catch((err) => { 
     console.log('ERROR'); 
     res.send(err); 
    }); 
}); 

指定したユーザー名とパスワードの組み合わせを持つユーザーが存在するかどうかを比較します。

プレーンテキストで暗号化せずにパスワードを保存しているようです。これはまったく安全ではありません。 bcryptのようなライブラリを使用し、データベースに暗号化されたパスワードを格納するだけです

関連する問題