Аутентификация пользователей с помощью пароля в React Native - PullRequest
0 голосов
/ 30 октября 2019

Ребята У меня есть несколько общих вопросов о взаимодействии с моей базой данных PostgreSQL, моим ExpressJS API и React Native Frontend.

Мне удалось написать несколько запросов, которые, например, проверяют, введено ли имя пользователя в моем приложении RN. соответствует тому, что находится в БД, и возвращает его ИД пользователя.

Я знаю, что в моей БД каждый пользователь имеет свой пароль, который хранится в БД хэшированным способом.

Как бызапрос, который выглядит так, будет возвращать, например, идентификатор пользователя, как я это делаю, но только если имя пользователя существует и соответствует паролю, который хранится в БД?

Нужно ли знать, как хешируются пароли на БД?

Запрос идентификатора пользователя:

    static getUserId (username, callback) {
    db.query(`SELECT userid FROM employee WHERE username = '${username}'`, (err, res)=> {
        if(err.error){
            return callback(err.error)
        } else {
            return callback(res)
        }
    })
}

Пароли сохраняются в одной и той же таблице сотрудников под паролем.

РЕДАКТИРОВАТЬ: Я думаю, что могу взять два утверждения WHERE, подобные этому:

`SELECT userid FROM employee WHERE username = '${username}' AND WHERE password = '${password}'`

но если пользователь вводит свой пароль внутри приложения, он не хэшируется, поэтому мне нужно отправить тот же метод хеширования, чтобы сравнить эти значения?

Заранее спасибо! С уважением Исчез.

Ответы [ 2 ]

0 голосов
/ 30 октября 2019

Вы можете использовать bcrypt.js для хэширования ваших паролей.

Для хеширования пароля в SignUp.js :

app.post('/signup',(req,res,next)=> {
 //Password from request body of register request
    const myPlaintextPassword = req.body.password
    //saltRounds are typically set to 12
    bcrypt.hash(myPlaintextPassword, saltRounds, function(err, hash) {
      // Store hash in your password DB with INSERT.
    });
}

сейчассравнить с Hash в Login.js :

app.post('/login',async (req,res,next)=>{
const existingUser = await db.query(`SELECT userid FROM employee WHERE username = '${username}'`, (err, res)=> {
        if(err.error){
            return callback(err.error)
        } else {
            return callback(res)
        }
    })
    const valid = await bcrypt.compare(req.body.password, existingUser.password);
if (!valid) {
        res.status(401).send('Wrong pass');
        return req.next()
    }
}
0 голосов
/ 30 октября 2019

Вам нужно хешировать входящий пароль и сравнить два хеша.

При этом: если это вообще будет использоваться реальными людьми, я бы предложил использовать библиотеку для обработки вашей аутентификации вместописать свой собственный. Есть много вещей, которые могут пойти не так, чтобы сделать ваше приложение небезопасным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...