node.js - sessionStorage 中的 Jwt 验证在后端做出反应
问题描述
我有一个用于登录并生成正常运行的 JWT 的 api,我将 jwt 保存在 sessionStorage 中:
getDate = () => {
console.log(JSON.parse(sessionStorage.getItem('token')));
const data = {token: sessionStorage.getItem('token')};
const requestInfo = {
method:'GET',
body: JSON.stringify({data}),
headers: new Headers({
'Content-Type': 'application/json',
'jwt': sessionStorage.getItem('token')
}),
};
console.log('chegouaq');
fetch('http://localhost:9000/users', requestInfo)
.then(response => {
console.log('chegouaq2');
if(response.ok){
return response.json();
}
throw new Error("Token Invalido..")
})
.then(data => {
console.log(JSON.stringify(data));
return;
})
.catch(e => {
this.setState({message: e.message})
console.error(e);
});
}
我通过 head 发送我的 jwt,但我遇到了问题,我不知道如何使用我的 API 验证它
我的路由器/用户:
app.route('/users')
.all(app.auth.authenticate())
.get((req,res)=>{
usersController
.getAll()
.then(data => {
res.json(data);
})
.catch(error=>{
console.log(error);
res.status(400);
});
})
.all(app.auth.authenticate())
在这里我称之为我的护照策略
这是我的策略:
const strategy = new Strategy(options,(payload, done) => {
Users
.findOne({where: payload.id})
.then(user => {
if(user){
return done(null,{
id: user.id,
login: user.login
});
}
return done(null,false);
})
.catch(error => done(error,null));
});
passport.use(strategy);
return {
initialize: () => passport.initialize(),
authenticate: () => passport.authenticate('jwt', jwtConfig.session)
};
}
我不知道如何发送我的 jwt 来验证
我的主要 app.js:
const express = require('express');
const bodyParser = require('body-parser');
const indexRouter = require('./routes/index');
const usersRouter = require('./routes/users');
const authRouter = require('./routes/auth');
const authorization = require('./auth');
const config = require('./config/config');
const datasource = require('./config/datasource');
const Email = require('./utils/email');
const app = express();
const port = 9000;
app.set('port',port);
app.config = config;
app.email = new Email(app.config);
app.datasource = datasource(app);
console.log(app.config);
app.use(bodyParser.json({
limit: '5mb'
}));
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
const auth = authorization(app);
app.use(auth.initialize());
app.auth = auth;
indexRouter(app);
usersRouter(app);
authRouter(app);
module.exports = app;
解决方案
尝试如下更新 Authorization 标头:
headers: new Headers({
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + sessionStorage.getItem('token')
}),
推荐阅读
- python - 移动时图像旋转
- android - 我需要从 onTouchEvent 中删除 TAP_TIMEOUT 延迟
- python - 如何在 Tornado 中为 GET 请求设置 URI 限制
- python - 是否可以一次迭代多个字典键?
- java - 用 @NonNull 注释 Integer 还是使用原始 int 更好?
- jasper-reports - Jasper 报告在每个报告中添加通用页眉/页脚/在所有报告中设置的默认页眉页脚
- c++ - 如何使用类c++的线程成员变量
- c++ - 我通过迭代加法和检查单个字符(参见代码)将二进制数转换为十进制的方法有什么问题?
- vim - 如何在不进入插入模式的情况下用鼠标选择文本
- c++ - std::variant 和不完整类型:它是如何工作的?