【问题标题】:How do I set role in Node JS JWT Authentication?如何在 Node JS JWT 身份验证中设置角色?
【发布时间】:2021-03-02 23:07:39
【问题描述】:

我是 Node JS 的新手,现在我正在学习如何在我的 Rest API 中使用 JWT 身份验证 我已经在我的登录功能中制作了令牌生成器,但是当我尝试通过设置某个角色来验证令牌时,如果角色等于 2,我可以获得数据。现在我遇到了麻烦,因为我无法验证我的令牌

登录:

exports.login = function(req, res){
    var post = {
        email : req.body.email,
        password : req.body.password
    }

    var query = "SELECT * FROM ?? WHERE ?? = ? AND ?? = ?";
    var table = ["user", "password", md5(post.password), "email",post.email];

    query = mysql.format(query,table);

    connection.query(query, function(error, rows){
        if(error){
            console.log(error);
        }else{
            if (rows.length == 1){
                //ini 1440 dalam second
                var token = jwt.sign({rows}, config.secret);
                id_user = rows[0].id;
                username = rows[0].username;
                email = rows[0].email;
                tanggal_daftar = rows[0].tanggal_daftar;
                role = rows[0].role;

                var data = {
                    id_user : id_user,
                    access_token : token,
                    username : username,
                    email : email,
                    tanggal_daftar : tanggal_daftar,
                    role : role,
                    ip_address : ip.address()
                }

                res.json({
                     success : true,
                     message : "Token JWT generate",
                     token : token,
                     idUser: data.id_user,
                     username : username,
                     email : data.email,
                     tanggal_daftar : tanggal_daftar,
                     role : data.role
                    });

            }else{
                 res.json({"Error": true, "Message":"Email atau password anda salah"});
            }
        }
    });
}

令牌检查:

const jwt = require('jsonwebtoken');
const config = require('../config/secret');

function verifikasi(role){
    return function (req, rest, next){
    // var role = req.body.role;
        //cek authorization header
        var tokenWithBearer = req.headers.authorization;
        if(tokenWithBearer){
            var token = tokenWithBearer.split(' ')[1];
            //verifikasi
            jwt.verify(token, config.secret, function(err, decoded){
                if(err){
                    return rest.status(401).send({auth:false, message:"Token tidak terdaftar!"});
                }else{
                    if(role == 2){
                        req.auth = decoded;
                        next();
                    }else{
                        return rest.status(401).send({auth:false, message:"gagal melakukan otorisasi!"});
                    }
                }
            });
        }else{
            return rest.status(401).send({auth:false, message:"Token tidak tersedia!"});
        }
    }
}

module.exports = verifikasi;

索引:

// alamat dengan otoritas khusus
router.get('/api/v1/rahasia', verifikasi(), auth.halamanrahasia);

【问题讨论】:

  • 您遇到什么错误?此外,您没有将角色的值传递给您的验证功能。
  • 错误是我无法使用 postman 中的角色验证我的帐户,而且我确实尝试在我的函数中设置值,但它使其他具有不同角色的帐户可以获取数据
  • 您在提出请求后得到邮递员的什么响应?
  • 一直报码401,消息授权失败
  • 在 jwt.verify 里面做 console.log(decoded) 看看它的值是多少。

标签: javascript node.js rest


【解决方案1】:

你的if(role == 2)有错误,你应该把它改成(decoded.role == 2)

编辑:将if(role == 2) 更改为if(decoded.rows.role == 2)

【讨论】:

  • 当您尝试访问路由 /api/v1/rahasia 时,您的服务器运行的终端是否记录了任何错误?或者代码流无法按您的意愿工作。发生错误时服务器的响应是什么?
  • 代码不能按我的意愿工作,它不断给出代码 401 加上消息授权失败
  • 错误代码为 401,因为您有 3 个返回状态为 401 的返回语句。检查您得到的返回语句。 Token tidak tersedia!gagal melakukan otorisasi!Token tidak terdaftar! 我想你猜对了gagal melakukan otorisasi!?我想我发现了一个错误。您需要将if(role == 2) 更改为if(decoded.rows.role == 2)。因为当您创建令牌时,您传递的是var token = jwt.sign({rows}, config.secret); 而不是var token = jwt.sign(rows, config.secret);。它将您的 rows 对象包装在另一个对象中,这就是您需要使用 decoded.rows.role 的原因
  • 欢迎您。你能把我标记为正确答案吗:D 我为正确答案添加了编辑部分:D
  • 很高兴??
猜你喜欢
  • 2016-08-21
  • 2020-02-01
  • 2016-01-02
  • 2016-05-01
  • 2021-06-28
  • 2019-03-30
  • 2020-09-21
  • 2016-09-23
  • 2019-10-30
相关资源
最近更新 更多