angular - 如何在 express-JWT 中获取授权令牌?
问题描述
在遵循有关使用 JWT 授权的简单教程时,我有以下代码:
app.use(expressJwt({secret: 'mojos', algorithms: ['HS256']}).unless({path: ['/api/auth']}));
app.post('/api/auth', function(req, res) {
const body = req.body;
const user = USERS.find(user => user.username == body.username);
if(!user || body.password != 'todo') return res.sendStatus(401);
var token = jwt.sign({userID: user.id}, 'mojos', {expiresIn: '2h'});
res.send({token});
});
但是,当我尝试打开路线时,出现错误:
app.get('/api/users', function (req, res) {
res.type("json");
res.send(getUsers(1));
});
有人看到有什么问题吗?如果我注释掉 app.use 行,一切正常,但是这不是最终应用程序的目标。
解决方案
你不必使用:
app.use(expressJwt({secret: 'mojos', algorithms: ['HS256']}).unless({path: ['/api/auth']}));
只需创建一个令牌并将其保存在 cookie 中
var token = jwt.sign({userID: user.id}, 'mojos', {expiresIn: '2h'});
res.cookie('CookieName',token,{ maxAge : 1000*60*60*24 /*in ms*/ , httpOnly : true })
获取并验证令牌使用:
const token = req.cookies.CookieName;
if(token)
{
jwt.verify(token,mojos,(err,decodedToken)=>{
if(err) trow err
console.log(decodedToken.userID); //--> will show your the id
})
}
else
console.log('invalid token')
每当您转到任何根目录时,您都可以从 req 访问令牌并对其进行验证
最后一件事,要使用res.cookies
你应该安装 cookie-parser 并使用:
const cookieParser = require('cookie-parser')
app.use(cookieParser())
推荐阅读
- javascript - 为什么会出现此错误:错误:连接 ECONNREFUSED?
- sql - 文本列的 SQL Pivot
- vue.js - 绘制画布大小时画布大小不同
- excel - 计算(不列出!)范围内的唯一项目以分配给变量
- c++ - 通过 const 引用传递时修改对象
- javascript - 在使用 jquery 的视图内进行按钮检查之前调用事件
- flutter - 如何在 Flutter 中使用 graphql 在 Mutation 中传递枚举?
- c# - 命令“esriRegasm.exe ...”以代码-1 退出。我无法构建项目
- c - 在 C 上不使用数组对整数进行排序
- clarifai - 从气泡到 claifai 的 API 身份验证问题