2017-05-16 9 views
0

ユーザがフォームに入力すると、電子メールが存在するかどうかを確認する必要があります。 フォームからrequser.emailには、ユーザーemaildがフォームに入力されます。 requser.emailとデータベースを比較して一致する方法電子メールがmysqlデータベースに存在するかどうかnodejsで確認する

router.post('/signup', function(req, res, next) { 
    var requser = req.body.data.user; 
    var hash = bcrypt.hashSync(req.body.data.user.password) 
    var str = ""; 

    /*email check start*/ 

    /*email check end*/ 
    switch (requser.role) { 
    case "approver": 
     str = 'INSERT INTO users (name, email, password,role) values("' + requser.name + '","' + requser.email + '","' + hash + '","approver")'; 
     break; 
    case "user": 
     str = 'INSERT INTO users (name, email, password,role) values("' + requser.name + '","' + requser.email + '","' + hash + '","user")'; 
     break; 
    case "admin": 
     str = 'INSERT INTO users (name, email, password,role) values("' + requser.name + '","' + requser.email + '","' + hash + '","admin")'; 
     break; 
    } 
    if (!str) { 
    return res.json({ 
     "status": "error", 
     "data": { 
     "redirect": "/" 
     } 
    }); 
    } 
    connection.query(str, function(error, rows) { 
    if (error) { 
     console.log("error ocurred", error); 
    } 
    //console.log(rows); 
    res.json({ 
     "status": error ? "error" : "success", 
     "data": rows || "" 
    }) 
    }); 
}); 
+2

Here'sUNIQUE CONSTRAINTの例と、ここではSELECT 1の例です。 – SLaks

+0

** ** ** [SQLインジェクションのバグ](http://bobby-tables.com/)を回避するには、[placeholder values](https://github.com)を使用してクエリ内の任意のデータをエスケープする*/mysqljs/mysql#エスケープクエリ値)。このログインシステムは誰でもあなたのサイトとデータを*何でも*することができます。 – tadman

答えて

1

あなたは、そのメールアドレスを持つレコードを取得したり、挿入は失敗するように、電子メールフィールドにUNIQUE CONSTRAINTを定義するSELECT 1クエリを記述することができます。あなたは、SQLインジェクションの脆弱性を持っている

SELECT 1 FROM users WHERE email = <email>; 
+0

'$ email'はPHPのことです。これはNodeの質問です。 – tadman

+0

@ tadman corrected .. –

関連する問題