Я использую узел и express с vue. Я пытаюсь реализовать промежуточное программное обеспечение для маршрутов моего узла, проверить маркер входа в систему и, если оно не так, перенаправить на страницу входа.
Это мой код.
Main app.js
file
const express = require('express');
const path = require('path');
const cors = require('cors');
const http = require('http');
const bodyParser = require('body-parser');
const app = express();
app.use(cors());
app.use(express.static(path.join(__dirname,'public')));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended:false}));
app.use(express.json());
app.use(express.urlencoded({extended:false}));
app.use('/login', require('./routes/login'));
app.use('/performance', require('./routes/performance'));
const port = 4000;
http.createServer(app).listen(port, ()=>{
console.log('server runs on port ', port);
});
Тогда в моих маршрутах у меня есть
const express = require('express');
const token = require('../../lib/token');
router.get('/:product/dataquality/', token.validate(), (req, res)=>{
const product = req.params.product;
db.dataquality(product)
.then((resolved)=>{
console.log('route dataquality result', resolved);
res.json({success:true, data:resolved});
})
.catch((error)=>{
console.log('route dataquality error', error);
res.json({success:false, data:false});
});
});
И это token.validate
связующее ПО
const jwt = require('jsonwebtoken');
const config = require('../db/config');
const validate = ()=>{
return (req, res, next)=>{
const token = req.get('Authorization');
const key = config.key;
jwt.verify(token, key,function(err, decoded) {
if (err){
console.log('token error');
res.redirect('/login');
}
if (decoded){
console.log('token ok');
next();
}
});
}
}
exports.validate = validate;
Это работает нормально, и я вижу журналы консоли токена при входе в свое приложение. Если я go ввел в браузер и отредактировал токен (удалил пару символов, но не удалил его полностью), чтобы токен был, но это неправильный токен, он имеет неправильное значение: я вижу в своей консоли token error
и я не получаю данных, но перенаправление на страницу входа никогда не происходит. Если я сделаю res.redirect('http://localhost:8080/login');
, я все еще не получу перенаправление.
Что мне не хватает? Как я могу это исправить?
Если вы считаете, что это проблема Vue, дайте мне знать, чтобы я мог предоставить Vue код маршрутизации.
Спасибо
РЕДАКТИРОВАТЬ
Этот файл, который обрабатывает маршруты в Vue - router.js
import Vue from 'vue'
import Router from 'vue-router'
import store from '@/components/store';
import Login from './components/Login.vue'
import Performance from './views/Performance.vue'
Vue.use(Router)
const router = new Router({
mode: "history",
base: process.env.BASE_URL,
routes: [
{
path: '/login',
name: 'login',
component: Login,
},
{
path: '/performance',
name: 'performance',
component: Performance,
beforeEnter: (to, from, next) => {
if (store.state.login.token == null || !store.state.login.token) {
next('/login');
}
else{next();}
}
},
{
path: '*',
redirect: '/login'
}
]
})
router.beforeEach((to, from, next) => {
store.dispatch('resetAccessToken');
if (to.fullPath === '/performance') {
if (!store.state.login.token) {
console.log('VUE route go to login');
next('/login');
}
}
if (to.fullPath === '/login') {
if (store.state.login.token) {
console.log('VUE route browse normally');
next('/performance');
}
}
next();
});
Если я ищу "route" в консоли браузера, чтобы найти console.log('VUE route go to login');
или console.log('VUE route browse normally');
он говорит, что нашел 160, но я не вижу ни одного.
Я все еще не получаю данных, но могу нормально просматривать пустые Vue страницы. Переадресация узла или Vue должна сработать и отправить меня для входа, но ни один не работает, так что я все еще могу просматривать.
Спасибо