Использование ролей и указания c идентификатора пользователя для ограничения того, какие разделы можно просматривать в реагировать / узел / express / mysql? - PullRequest
1 голос
/ 20 февраля 2020

Я создаю веб-приложение, используя MySQL, express, response, node, и я впервые использую JavaScript. Я использовал сессии раньше, когда делал проект с PHP и у меня возникли проблемы с пониманием того, как добавить доступ на основе ролей или спецификацию доступа c для конкретного пользователя.

Код, который я имею в минуту во внешнем интерфейсе:

export const login = user => {
    return axios
        .post('users/login', {
            userName: user.userName,
            password: user.password,
        })
        .then(res => {
            localStorage.setItem('usertoken', res.data);
            return res.data
        })
        .catch(err => {
            console.log(err)
        })
}; 

и во внутреннем.

// login
users.post('/login', (req, res) => {
    User.findOne({
            where: {
                userName: req.body.userName
            }
        })
        .then(user => {
            if (bcrypt.compareSync(req.body.password, user.password)) {
                let token = jwt.sign(user.dataValues, process.env.SECRET_KEY, {
                    expiresIn: 1440
                })
                res.json({
                    token: token
                })
            } else {
                res.send('User doesnt exist')
            }
        })
        .catch(err => {
            res.send('error: ' + err)
        })
});

Как бы я go запросил / возвратил тип пользователя / user_id из MySQL база данных, использующая Express при отправке токена jwt? будут ли тип пользователя и user_id храниться в JWT 'usertoken' и храниться в локальном хранилище?

1 Ответ

0 голосов
/ 24 февраля 2020

Как мне go запросить / вернуть тип пользователя / user_id из базы данных MySQL, используя Express при отправке токена jwt?

        if (bcrypt.compareSync(req.body.password, user.password)) {
            // place your query here - use `username` as a key to get user row
            // store results in user object, then:
            let token = jwt.sign(user.dataValues, process.env.SECRET_KEY, {
                expiresIn: 1440
            })
            res.json({
                token: token
            })

будут ли тип пользователя и user_id храниться в JWT 'usertoken' и храниться в локальном хранилище?

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

Я создаю веб-приложение, использующее MySQL, express, реагирование, узел, и я впервые использую JavaScript

Отлично! Добро пожаловать в современную разработку стека:)

Редактировать:

Признаюсь - мой оригинальный ответ может сбить с толку. Итак:

  • Как правило - никогда (никогда) никогда не пишите sql запросов внутри вашего внешнего проекта (с точки зрения безопасности)
  • Ваш бэкэнд должен управлять связью по отношению к БД (в большинстве случаев вы должны использовать одно соединение на БД)
  • Расширить свой бэкэнд с помощью записей Api, которые запрашивают вашу базу данных. Разрешить этим записям принимать параметры запроса и / или заголовки запроса
  • Вызовите ваш API с указанными c параметрами запроса для запроса вашего db

В вашем примере я просто использовал ваш login запись для размещения вашего запроса. Поскольку вы используете mysql, рассмотрите возможность использования сторонней библиотеки, чтобы помочь вам (например, mysql2 )

В конце концов, она должна выглядеть примерно так:

    if (bcrypt.compareSync(req.body.password, user.password)) {
        connection.query('SELECT * FROM `users` WHERE `name` = ?', ['user name to query' ], function(err, results) {
        if (err) return res.send('error: ' + err)

        let token = jwt.sign(user.dataValues, process.env.SECRET_KEY, {
            expiresIn: 1440
        })
        res.json({
            token: token
        })

});

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