首页 > 解决方案 > 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;

标签: node.jsreactjsjwt

解决方案


尝试如下更新 Authorization 标头:

  headers: new Headers({
                    'Content-Type': 'application/json',
                    'Authorization': 'Bearer ' + sessionStorage.getItem('token')
            }),

推荐阅读