【发布时间】:2019-06-01 00:14:35
【问题描述】:
我是 Node Js 的新手。之前,我使用 Laravel API。在 Laravel 中,我使用保存在数据库中的令牌来处理 Endpoints 以使用某些端点。例如:localhost:3000/api/users/getall?token=1234。如果没有令牌通过,API 会显示Unauthorized access and no token provided。如果令牌无效,则系统将显示Invalid token。这样,如何使用保存在 Mongo 数据库中的令牌验证端点?
用户模型
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 端点只能由管理员访问
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 路由现在也可以被管理员和计数器访问。而且它不检查数据库中的令牌(即:可以在没有令牌的情况下访问)。
如何使用令牌检查和验证?
【问题讨论】:
-
你熟悉中间件吗?
-
不,我是 node js 新手