Ролевая аутентификация входа в систему в node.js - PullRequest
0 голосов
/ 10 марта 2020

Я сделал две формы для регистрации работодателей и помощников. Теперь я хочу сделать авторизацию только с одной формой. Как я могу сделать это так, чтобы, когда пользователь нажимает на логин, значения совпадали как с таблицей работодателей, так и со списком помощников, и там, где значения совпадали, это просто логин? Это для одного.

app.post('/auth', function(request, response) {
var username = request.body.username;
var password = request.body.pwd;
if (username && password) {
    connection.query('SELECT * FROM fyp_helpers WHERE username = ? AND password = ?', [username, password], function(error, results, fields) {
        if (results.length > 0) {
            request.session.loggedin = true;
            request.session.username = username;
            response.redirect('/home');
        } else {
            response.send('Incorrect Username and/or Password!');
        }           
        response.end();
    });
} else {
    response.send('Please enter Username and Password!');
    response.end();
}
});

Ответы [ 2 ]

1 голос
/ 10 марта 2020

Я бы создал 2 приватные функции: одну для проверки работника и одну для проверки, является ли он помощником.

Это упростит в будущем внесение изменений, таких как две отдельные формы входа в систему или различные функциональные возможности.

Я бы также сделал ролевую модель, но для этого я предлагаю вам руководство .

function helperAuthentication(username, password){
  connection.query('SELECT * FROM fyp_helpers WHERE username = ? AND password = ?', [username, password], function(error, results, fields) {
          if (results.length > 0) {
              request.session.loggedin = true;
              request.session.username = username;
              response.redirect('/home');
          } else {
              return false
          }           
}

function employeeAuthentication(username, password){
  connection.query('SELECT * FROM fyp_employees WHERE username = ? AND password = ?', [username, password], function(error, results, fields) {
          if (results.length > 0) {
              request.session.loggedin = true;
              request.session.username = username;
              response.redirect('/home');
          } else {
              return false
          }           
}

app.post('/auth', function(request, response) {
var username = request.body.username;
var password = request.body.pwd;
if (username && password) {
    if(!helperAuthentication(username,password) && !employeeAuthentication(usernamen,password){
      response.send('Incorrect Username and/or Password!');
      response.end();
    }
    });
} else {
    response.send('Please enter Username and Password!');
    response.end();
}
});
1 голос
/ 10 марта 2020

Вы можете сделать это на слое SQL, это простой способ сделать это. Я предполагаю, что есть таблица fyp_employers.

app.post('/auth', function(request, response) {
    var username = request.body.username;
    var password = request.body.pwd;
    if (username && password) {
        connection.query('SELECT * FROM fyp_helpers WHERE username = ? AND password = ? UNION SELECT * FROM fyp_employeers WHERE username = ? AND password = ?', [username, password, username, password], function(error, results, fields) {
            if (error) {
                console.error("An error occurred:", error);
                response.send('Oops, something went wrong!');
            } else if (results.length > 0) {
                request.session.loggedin = true;
                request.session.username = username;
                response.redirect('/home');
            } else {
                 response.send('Incorrect Username and/or Password!');
            }           
            response.end();
        });
    } else {
        response.send('Please enter Username and Password!');
        response.end();
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...