jwt令牌过期后如何注销

时间:2019-10-24 05:55:59

标签: node.js vue.js jwt

我正在使用node.jsvue.js开发网络应用程序,正在使用jwtpassport.js使用passport-jwtstrategy进行身份验证并维护会话< / p>

我已经完成了从创建jwt到保护路由的所有工作,现在我的问题是生成jwt时我正在传递expiresIn:3600,所以我想从Ui中自动注销用户并删除一小时后从localStorage获得令牌

在解码我的jwt时,我会得到

 {
  "name": "Dheeraj",
  "iat": 1571896207,
  "exp": 1571899807
}

那么我如何获得注销的实时信息

auth.js vue商店文件中,当用户单击注销时,我的注销代码为

logout({ commit }) {
        return new Promise((resolve, reject) => {
            localStorage.removeItem('jwt-token')
            localStorage.removeItem('user-name')
            commit('setAuthUser', null)
            resolve(true)
        })

    },

在同一个文件中,我有一个方法getAuthUser,该方法在页面加载或重新加载时都在运行,以检查以保护rout和guestUser

getAuthUser({ commit, getters }) {
        const authUser = getters['authUser']
        const token = localStorage.getItem('jwt-token')
        const isTokenValid = checkTokenValidity(token)
        if (authUser && isTokenValid) {
            return Promise.resolve(authUser)
        }

        commit('setAuthUser', token)
        commit('setAuthState', true)
        debugger
        return token


    }

所以我的令牌过期后如何注销 任何人在这里,请指导我,令牌过期后如何注销

修改

在我的router.js文件中

router.beforeEach((to, from, next) => {
store.dispatch('auth/getAuthUser')
    .then((authUser) => {
        const isAuthenticated = store.getters['auth/isAuthenticated']

        if (to.meta.onlyAuthUser) {
            if (isAuthenticated) {
                next()
            } else {
                next({ name: 'login' })
            }
        } else if (to.meta.onlyGuestUser) {
            if (isAuthenticated) {
                next({ name: 'welcome' })
            } else {
                next()
            }
        } else {
            next()
        }
    })

})

从我的身份验证文件中,我正在调用get authUser,我已经在上面提到过

为了检查令牌的有效性,我正在使用此代码

function checkTokenValidity(token) {
if (token) {
    const decodedToken = jwt.decode(token)
    return decodedToken && (decodedToken.exp * 1000) > new Date().getTime()

}
return false

}

但是当我在登录页面上并且没有令牌时它返回false,但是一旦我登录它就显示null

我的全局api文件

    import axios from 'axios';

export default () => {
    let headers = {
        'cache-control': 'no-cache'
    };
    let accessToken = localStorage.getItem('jwt-token');

    if (accessToken && accessToken !== '') {
        headers.Authorization = accessToken;

    };
    return axios.create({
        baseURL: 'http://localhost:8086/',
        headers: headers
    });
}

1 个答案:

答案 0 :(得分:1)

请参阅axios文档:https://github.com/axios/axios

import axios from 'axios';

export default () => {
    let headers = {
        'cache-control': 'no-cache'
    };
    let accessToken = localStorage.getItem('jwt-token');

    if (accessToken && accessToken !== '') {
        headers.Authorization = accessToken;

    };
    const instance = axios.create({
        baseURL: 'http://localhost:8086/',
        headers: headers
    });

    instance.interceptors.response.use((response) => {
        if(response.status === 401) {
             //add your code
             alert("You are not authorized");
        }
        return response;
    }, (error) => {
        if (error.response && error.response.data) {
             //add your code
             return Promise.reject(error.response.data);
        }
        return Promise.reject(error.message);
    });

    return instance;
}