node.js - 在 Node Js 中处理基于 token 的授权

标签 node.js token

我是 Node Js 新手。之前,我使用 Laravel API。在 Laravel 中,我使用数据库中保存的 token 来处理端点,以使用某些端点。例如:localhost:3000/api/users/getall?token=1234。如果没有传递 token ,API 会显示未经授权的访问且未提供 token 。如果 token 无效,系统将提示无效 token 。这样,如何使用 Mongo 数据库中保存的 token 验证端点?

用户模型

var bcrypt = require('bcryptjs');
var mongoose = require('mongoose');
var userSchema = new mongoose.Schema(
{
    fname : {type: String, required: true, max: 25, trim: false},
    uname : {type: String, required: true, max: 25, trim: false},
    password : {type: String, required: true},
    token : {type: String, required: true},
    role: {type: String, required: true}, //0 - admin, 1 - counter
},
{
    timestamps:true
});

mongoose.model('User', userSchema);
module.exports = mongoose.model('User');

以下用户 getAll 端点只能由管理员访问

获取所有端点

router.get("/", function (req, res, next)
{
    User.find()
    .select('fname uname')
    .exec()
    .then(docs => {
        return res.send(setting.status("User details retrieval successfully", true, docs))
    .catch(err => {
        return res.send(setting.status("Error in retrieving user details",false, err))
    });
    });
});

})

上面的 getAll 路由现在也可以由 admin 和 counter 访问。并且它不会检查数据库中的 token (即:无需 token 即可访问)。

如何使用 token 检查和验证?

最佳答案

在执行任何操作之前,从查询参数中获取 token 并验证它。如果无效,只需发送“401 未经授权”状态或您喜欢的任何响应。

router.get("/", function (req, res, next) {      
  const token = req.query.token
  if (!isValid(token)) return res.status(401).end()

  User.find()
    .select('fname uname')
    .exec()
    .then(docs => {
      return res.send(setting.status("User details retrieval successfully", true, docs))
    })
    .catch(err => {
      return res.send(setting.status("Error in retrieving user details",false, err))
    });
})

确保显式返回,否则执行将继续。或者只使用 if-else 语句。

关于node.js - 在 Node Js 中处理基于 token 的授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54055621/

相关文章:

c - 如何在不使用 strtok 的情况下在 C 中拆分字符串

ruby-on-rails - 添加 token_authenticatable 以设计迁移

c - 为什么此方法会抛出段错误?

javascript - 如何使用 PHP 或 Node JS 进行实时通知?

javascript - 如何在 Windows 10 上更改 Node js 进程名称?

node.js - 使用nodejs将"Pushing"图像导入浏览器

javascript - Ember.js 模型保存不向服务器发送数据

php - Laravel 5.1 session 中 POST header token 和 token 之间的 token 不匹配

security - 身份验证 token 已加密但未签名 - 弱点?

javascript - 我遇到 PayloadCMS 错误。验证错误: The following field is invalid: email