如何让 Vue-Cookies 在 Vue-Router 组件中工作
How do I get Vue-Cookies to work in Vue-Router Component
我有一个路由器 index.js 文件,它像这样加载 Vue、Vue-Router 和 Vue-Cookies:
import Vue from 'vue';
import Router from 'vue-router';
import VueCookies from 'vue-cookies';
Vue.use(Router);
Vue.use(VueCookies);
然后我这样定义所有路线:
const router = new Router({
routes: [
{
path: '*',
name: 'erorr',
secure: false,
component: error404,
},
{
path: '/',
name: 'Home',
secure: false,
component: home,
},
{
path: '/clp',
name: 'CLP',
secure: true,
component: clpHome,
},
{
path: '/saml/login',
name: 'samlLogin',
secure: false,
component: samlLogin,
},
{
path: '/saml/logout',
name: 'samlLogout',
secure: false,
component: samlLogout,
},
{
path: '/user/profile',
name: 'userProfile',
secure: false,
component: userProfile,
},
],
});
在此之后,它正在检查是否设置了 cookie:
router.beforeEach((to, from, next) => {
// Look at all routes
router.options.routes.forEach((route) => {
// If this is the current route and it's secure
if (((to.matched[0].path === route.path || to.matched[0].path === '')/* && route.path === '/'*/) && route.secure) {
// Check if there's a cookie and verify it
// Check if user has cookie "SAMLSession"
这是弹出错误的地方,"TypeError: Cannot read property 'isKey' of undefined"当我尝试
console.log(这个.$cookies);
它也被返回 'undefined'。
if (this.$cookies.isKey('SAMLSession')) {
// Sets the value of "SAMLSession" cookie to a variable
const sessionId = this.$cookies.get('SAMLSession');
// Runs function checkSaml located above, then once that completes....
checkSaml(sessionId).then(result => {
// Check if the session id is valid via Express, noted by a response of "OK" if good, and "BAD!" if not valid
if (result.data === 'OK') {
// If it's good, allow the user to see the page
next();
} else {
// If it's not valid, set a cookie of the page the user was trying to access and then sign them in
this.$cookies.set('referLocation', to.path, Infinity, '/');
next('/saml/login');
}
});
} else {
// If it's not a cookie, set a cookie of the page the user was trying to access and then sign them in
this.$cookies.set('referLocation', to.path, Infinity, '/');
next('/saml/login');
}
}
});
// If nothing has happened, allow the user to visit the page
next();
});
这个配置几天前就可以工作了,现在它没有加载 VueCookies,如果有任何故障排除方面的建议,我们将不胜感激。
解决方案是将所有 'this.$cookies' 对象更改为 'window.$cookies',如下所示:
router.beforeEach((to, from, next) => {
// Look at all routes
router.options.routes.forEach((route) => {
// If this is the current route and it's secure
if (((to.matched[0].path === route.path || to.matched[0].path === '') && route.path === '/') && route.secure) {
// Check if there's a cookie and verify it
// Check if user has cookie "SAMLSession"
if (window.$cookies.isKey('SAMLSession')) {
// Sets the value of "SAMLSession" cookie to a variable
const sessionId = window.$cookies.get('SAMLSession');
// Runs function checkSaml located above, then once that completes....
checkSaml(sessionId).then(result => {
// Check if the session id is valid via Express, noted by a response of "OK" if good, and "BAD!" if not valid
if (result.data === 'OK') {
// If it's good, allow the user to see the page
next();
} else {
// If it's not valid, set a cookie of the page the user was trying to access and then sign them in
window.$cookies.set('referLocation', to.path, Infinity, '/');
next('/saml/login');
}
});
} else {
// If it's not a cookie, set a cookie of the page the user was trying to access and then sign them in
window.$cookies.set('referLocation', to.path, Infinity, '/');
next('/saml/login');
}
}
});
// If nothing has happened, allow the user to visit the page
next();
});
我遇到了同样的问题,试图弄清楚为什么 this
在路由器中未定义,这会导致 this.$cookies
错误。
这是我的做法。
//add this in the router index.js
import Vue from 'vue'
然后,我可以从 Vue
访问 cookie
变量
beforeEnter: (to, from, next) => {
let access_token = Vue.cookie.get('access_token')
if (access_token == null) {
// user doesn't have access token, redirect to login
next({ name: 'login' })
}
else {
// user has access token, user can open the page
next()
}
},
我有一个路由器 index.js 文件,它像这样加载 Vue、Vue-Router 和 Vue-Cookies:
import Vue from 'vue';
import Router from 'vue-router';
import VueCookies from 'vue-cookies';
Vue.use(Router);
Vue.use(VueCookies);
然后我这样定义所有路线:
const router = new Router({
routes: [
{
path: '*',
name: 'erorr',
secure: false,
component: error404,
},
{
path: '/',
name: 'Home',
secure: false,
component: home,
},
{
path: '/clp',
name: 'CLP',
secure: true,
component: clpHome,
},
{
path: '/saml/login',
name: 'samlLogin',
secure: false,
component: samlLogin,
},
{
path: '/saml/logout',
name: 'samlLogout',
secure: false,
component: samlLogout,
},
{
path: '/user/profile',
name: 'userProfile',
secure: false,
component: userProfile,
},
],
});
在此之后,它正在检查是否设置了 cookie:
router.beforeEach((to, from, next) => {
// Look at all routes
router.options.routes.forEach((route) => {
// If this is the current route and it's secure
if (((to.matched[0].path === route.path || to.matched[0].path === '')/* && route.path === '/'*/) && route.secure) {
// Check if there's a cookie and verify it
// Check if user has cookie "SAMLSession"
这是弹出错误的地方,"TypeError: Cannot read property 'isKey' of undefined"当我尝试 console.log(这个.$cookies); 它也被返回 'undefined'。
if (this.$cookies.isKey('SAMLSession')) {
// Sets the value of "SAMLSession" cookie to a variable
const sessionId = this.$cookies.get('SAMLSession');
// Runs function checkSaml located above, then once that completes....
checkSaml(sessionId).then(result => {
// Check if the session id is valid via Express, noted by a response of "OK" if good, and "BAD!" if not valid
if (result.data === 'OK') {
// If it's good, allow the user to see the page
next();
} else {
// If it's not valid, set a cookie of the page the user was trying to access and then sign them in
this.$cookies.set('referLocation', to.path, Infinity, '/');
next('/saml/login');
}
});
} else {
// If it's not a cookie, set a cookie of the page the user was trying to access and then sign them in
this.$cookies.set('referLocation', to.path, Infinity, '/');
next('/saml/login');
}
}
});
// If nothing has happened, allow the user to visit the page
next();
});
这个配置几天前就可以工作了,现在它没有加载 VueCookies,如果有任何故障排除方面的建议,我们将不胜感激。
解决方案是将所有 'this.$cookies' 对象更改为 'window.$cookies',如下所示:
router.beforeEach((to, from, next) => {
// Look at all routes
router.options.routes.forEach((route) => {
// If this is the current route and it's secure
if (((to.matched[0].path === route.path || to.matched[0].path === '') && route.path === '/') && route.secure) {
// Check if there's a cookie and verify it
// Check if user has cookie "SAMLSession"
if (window.$cookies.isKey('SAMLSession')) {
// Sets the value of "SAMLSession" cookie to a variable
const sessionId = window.$cookies.get('SAMLSession');
// Runs function checkSaml located above, then once that completes....
checkSaml(sessionId).then(result => {
// Check if the session id is valid via Express, noted by a response of "OK" if good, and "BAD!" if not valid
if (result.data === 'OK') {
// If it's good, allow the user to see the page
next();
} else {
// If it's not valid, set a cookie of the page the user was trying to access and then sign them in
window.$cookies.set('referLocation', to.path, Infinity, '/');
next('/saml/login');
}
});
} else {
// If it's not a cookie, set a cookie of the page the user was trying to access and then sign them in
window.$cookies.set('referLocation', to.path, Infinity, '/');
next('/saml/login');
}
}
});
// If nothing has happened, allow the user to visit the page
next();
});
我遇到了同样的问题,试图弄清楚为什么 this
在路由器中未定义,这会导致 this.$cookies
错误。
这是我的做法。
//add this in the router index.js
import Vue from 'vue'
然后,我可以从 Vue
cookie
变量
beforeEnter: (to, from, next) => {
let access_token = Vue.cookie.get('access_token')
if (access_token == null) {
// user doesn't have access token, redirect to login
next({ name: 'login' })
}
else {
// user has access token, user can open the page
next()
}
},