Commit 107c2e16 authored by 13841799530's avatar 13841799530

token令牌机制

全局路由拦截
封装接口请求
解润东
20211021
parent 6f915e5c
...@@ -6924,6 +6924,11 @@ ...@@ -6924,6 +6924,11 @@
"resolved": "https://registry.npm.taobao.org/js-base64/download/js-base64-2.5.1.tgz", "resolved": "https://registry.npm.taobao.org/js-base64/download/js-base64-2.5.1.tgz",
"integrity": "sha1-Hvo57yxfeYC7F4St5KivLeMpESE=" "integrity": "sha1-Hvo57yxfeYC7F4St5KivLeMpESE="
}, },
"js-cookie": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.0.tgz",
"integrity": "sha1-Gywnmm7s44ChIWi5JIUmWzWx7/s="
},
"js-levenshtein": { "js-levenshtein": {
"version": "1.1.6", "version": "1.1.6",
"resolved": "http://registry.npm.taobao.org/js-levenshtein/download/js-levenshtein-1.1.6.tgz", "resolved": "http://registry.npm.taobao.org/js-levenshtein/download/js-levenshtein-1.1.6.tgz",
...@@ -10061,6 +10066,11 @@ ...@@ -10061,6 +10066,11 @@
"tslib": "^1.9.0" "tslib": "^1.9.0"
} }
}, },
"s": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/s/-/s-1.0.0.tgz",
"integrity": "sha512-Tz63UXhdEBvvIV6Q0a+AV2Dx1TPq+vVWNYBxyCT9TG0uqn9kySwFTjfq3C1YuGBRwYtt9Tof11L6GCKi88foqw=="
},
"safe-buffer": { "safe-buffer": {
"version": "5.1.2", "version": "5.1.2",
"resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz", "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz",
......
...@@ -13,6 +13,7 @@ import App from './App.vue' ...@@ -13,6 +13,7 @@ import App from './App.vue'
import router from './router' import router from './router'
import store from './store' import store from './store'
import './permission' import './permission'
import Cookies from 'js-cookie'
import { prefix } from '@/common/js/utils' import { prefix } from '@/common/js/utils'
import { Divider, Popup, Overlay, Loading, Dialog, ContactCard, Form, AddressEdit, AddressList, Field, CellGroup, Cell, SwipeCell, Icon, Stepper, Card, Checkbox, CheckboxGroup, Button, Swipe, SwipeItem, PullRefresh, List, Tab, Tabs, GoodsAction, GoodsActionIcon, GoodsActionButton, SubmitBar, Toast ,Search,Picker,Uploader,Notify ,ContactList,Calendar,Radio,RadioGroup,Tag,Tabbar,TabbarItem,Sticky, Grid, GridItem,Skeleton,Col,Row, Image as VanImage, Badge,} from 'vant' import { Divider, Popup, Overlay, Loading, Dialog, ContactCard, Form, AddressEdit, AddressList, Field, CellGroup, Cell, SwipeCell, Icon, Stepper, Card, Checkbox, CheckboxGroup, Button, Swipe, SwipeItem, PullRefresh, List, Tab, Tabs, GoodsAction, GoodsActionIcon, GoodsActionButton, SubmitBar, Toast ,Search,Picker,Uploader,Notify ,ContactList,Calendar,Radio,RadioGroup,Tag,Tabbar,TabbarItem,Sticky, Grid, GridItem,Skeleton,Col,Row, Image as VanImage, Badge,} from 'vant'
import 'lib-flexible/flexible' import 'lib-flexible/flexible'
...@@ -21,7 +22,6 @@ Vue.use(Divider).use(Popup).use(Overlay).use(Loading).use(Dialog).use(Toast).use ...@@ -21,7 +22,6 @@ Vue.use(Divider).use(Popup).use(Overlay).use(Loading).use(Dialog).use(Toast).use
.use(ContactList).use(Calendar).use(Radio).use(RadioGroup).use(Tag).use(Tabbar).use(TabbarItem).use(Sticky) .use(ContactList).use(Calendar).use(Radio).use(RadioGroup).use(Tag).use(Tabbar).use(TabbarItem).use(Sticky)
.use(Grid).use(GridItem).use(Skeleton).use(Col).use(Row).use(VanImage) .use(Grid).use(GridItem).use(Skeleton).use(Col).use(Row).use(VanImage)
Vue.config.productionTip = false Vue.config.productionTip = false
new Vue({ new Vue({
router, router,
store, store,
......
import router from './router' import router from './router'
//设置白名单,指不需要登录就可以直接进入的页面 //设置白名单,指不需要登录就可以直接进入的页面
var whiteList = ["/login2"] var whiteList = ["/login2"]
import { getToken } from '@/utils/auth' // get token from cookie
//这里使用cookie.js,登录成功后将后台返回的token保存在cookie中 //这里使用cookie.js,登录成功后将后台返回的token保存在cookie中
// Cookies.set('admin_token','token_value'); // Cookies.set('admin_token','token_value');
var hasToken = localStorage.getItem('admin_token');
router.beforeEach(async(to, from, next) => { router.beforeEach(async(to, from, next) => {
//to: 即将要进入的目标 [路由对象] //to: 即将要进入的目标 [路由对象]
//from:当前导航正要离开的路由 //from:当前导航正要离开的路由
//next:一定要调用该方法来 resolve 这个钩子 //next:一定要调用该方法来 resolve 这个钩子
const hasToken = getToken()//确定用户是否已登录
console.log(hasToken) console.log(hasToken)
if (hasToken) { if (hasToken) {
if (to.path === '/login2') { if (to.path === '/login2') {
......
...@@ -7,32 +7,3 @@ export function getFun(url,params) { ...@@ -7,32 +7,3 @@ export function getFun(url,params) {
export function postFun(url,data) { export function postFun(url,data) {
return axios.post(url,data); return axios.post(url,data);
} }
//post请求表格
export function jsonPostList(url,data) {
return axios.post(url,data);
}
// import request from '@/utils/axios'
// /*get请求*/
// export function getFun(url,params) {
// return request({
// url: url,
// method: 'get',
// params
// })
// }
// /*post请求*/
// export function postFun(url,data) {
// return request({
// url: url,
// method: 'post',
// data
// })
// }
// /*json表格*/
// export function jsonPostList(url,data) {
// return request({
// url: url,
// method: 'post',
// data
// })
// }
import Cookies from 'js-cookie'
const TokenKey = 'Admin-Token'
export function getToken() {
return Cookies.get(TokenKey)
}
export function setToken(token) {
return Cookies.set(TokenKey, token)
}
export function removeToken() {
return Cookies.remove(TokenKey)
}
...@@ -9,95 +9,56 @@ ...@@ -9,95 +9,56 @@
import axios from 'axios' import axios from 'axios'
import { Toast } from 'vant' import { Toast } from 'vant'
import router from '../router' import router from '../router'
import { getToken } from '@/utils/auth' // get token from cookie
// axios.defaults.baseURL = process.env.NODE_ENV == 'development' ? 'http://backend-api-01.newbee.ltd/api/v1' : 'http://backend-api-01.newbee.ltd/api/v1' // axios.defaults.baseURL = process.env.NODE_ENV == 'development' ? 'http://backend-api-01.newbee.ltd/api/v1' : 'http://backend-api-01.newbee.ltd/api/v1'
axios.defaults.baseURL = '/hse/app-api' axios.defaults.baseURL = '/hse/app-api'
axios.defaults.withCredentials = true axios.defaults.withCredentials = true
axios.defaults.headers['X-Requested-With'] = 'XMLHttpRequest' axios.defaults.headers['X-Requested-With'] = 'XMLHttpRequest'
axios.defaults.headers['token'] = localStorage.getItem('token') || '' axios.defaults.headers['token'] = getToken() || ''
axios.defaults.headers.post['Content-Type'] = 'application/json' axios.defaults.headers.post['Content-Type'] = 'application/json'
axios.defaults.headers['data-Type'] = 'json'
axios.interceptors.response.use(res => {
if (typeof res.data !== 'object') {
Toast.fail('服务端异常!')
return Promise.reject(res)
}
if (res.data.resultCode != 200) {
if (res.data.message) Toast.fail(res.data.message)
if (res.data.resultCode == 416) {
router.push({ path: '/login' })
}
return Promise.reject(res.data)
}
return res.data
})
export default axios axios.interceptors.response.use(response => {
// const service = axios.create({
// baseURL: '/hse', //前缀路径
// headers: {//请求头部
// // "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
// "content-type": "application/json",
// "data-type": "json"
// }
// })
// //拦截接口请求
// service.interceptors.request.use(config => {
// // if (getToken()) {
// // config.headers['X-Token'] = getToken()
// // }
// return config
// },error => {
// console.log(error)
// return Promise.reject(error)
// })
// //拦截接口响应
// service.interceptors.response.use(response => {
// const res = response.data//获取请求返回数据 // const res = response.data//获取请求返回数据
// const code = response.status//获取请求响应码 // const code = response.status//获取请求响应码
// if(code == 200) {//请求响应码200 代表已经请求到接口 // if (typeof res.data !== 'object') {
// if(res.rtnCode === 500) {//接口响应码500 代表接口代码运行异常
// Toast.fail('服务端异常!') // Toast.fail('服务端异常!')
// return Promise.reject(new Error('Error'))//异步函数 报错 // return Promise.reject(res)
// } // }
// if(res.rtnCode === 5000) {//接口响应码500 代表接口代码运行异常 // if (res.data.resultCode != 200) {
// Toast.fail('服务端异常!') // // if (res.data.message) Toast.fail(res.data.message)
// return Promise.reject(new Error('Warning'))//异步函数 报错 // if (res.data.resultCode == 416) {
// router.push({ path: '/login2' })
// } // }
// if(res.code === 403) {//接口响应码403 代表token令牌失效 // // return Promise.reject(res.data)
// this.$dialog.confirm({
// title: '提示',
// message: '登录超时,请重新登录',
// })
// .then(() => {
// store.dispatch('user/resetToken').then(() => {
// location.reload()
// })
// })
// } else {
// return res//请求返回数据
// } // }
// } else { const res = response.data//获取请求返回数据
// Toast.fail('服务端异常!') const code = response.status//获取请求响应码
// if(code === 500) {//接口响应码500 代表接口代码运行异常 if(code == 200) {//请求响应码200 代表已经请求到接口
// this.$dialog.confirm({ if(res.code === 0) {//接口响应码0 代表接口代码运行正常
// title: '提示', return res
// message:'您已经退出,您可以取消停留在这个页面,或重新登录', }else{
// }).then(() => { this.$notify({
// store.dispatch('user/resetToken').then(() => { message:'失败',
// this.$router.push({path:'/login'}) background:'red',
// }) duration: 1000
// }) })
// } }
// return Promise.reject(new Error('Error')) }else{
// } this.$notify({
// },error => { message:'失败',
// console.log('err' + error) background:'red',
// Toast.fail('服务端异常!') duration: 1000
// return Promise.reject(error) })
// }) Promise.reject(new Error('Error'))
}
},err=>{
this.$notify({
message:'失败',
background:'red',
duration: 1000
})
return Promise.reject(err)
})
export default axios
\ No newline at end of file
// export default service
\ No newline at end of file
...@@ -50,7 +50,8 @@ ...@@ -50,7 +50,8 @@
</template> </template>
<script> <script>
import { getFun ,postFun} from '@/service/table' import { getFun } from '@/service/table'
import { setToken } from '@/utils/auth'
export default { export default {
data() { data() {
return { return {
...@@ -60,21 +61,26 @@ export default { ...@@ -60,21 +61,26 @@ export default {
password: "" password: ""
}; };
}, },
mounted() {}, mounted() {
},
methods: { methods: {
async onSubmit(values) { onSubmit(values) {
if(values.username=='admin'&&values.password=='123456'){ if(values.username=='admin'&&values.password=='123456'){
getFun('check/token').then((Response)=>{
if(Response.code==0){
this.$notify({ this.$notify({
message:'成功', message:'登录成功',
background:'green', background:'green',
duration: 1000 duration: 1000
}) })
await getFun('check/token').then((response)=>{
console.log(response)
})
localStorage.setItem('admin_token','2dsfewr')
this.$router.push('/MessageCenter') this.$router.push('/MessageCenter')
location.reload(); setToken(Response.data)
}
})
// localStorage.setItem('admin_token','2dsfewr')
// this.$router.push('/MessageCenter')
// location.reload();
}else{ }else{
this.$notify({ this.$notify({
message:'账号或密码不正确', message:'账号或密码不正确',
......
...@@ -62,6 +62,7 @@ ...@@ -62,6 +62,7 @@
<script> <script>
import tabBar from "@/components/TabBar"; import tabBar from "@/components/TabBar";
import { removeToken } from '@/utils/auth' // get token from cookie
export default { export default {
components: { components: {
tabBar tabBar
...@@ -83,9 +84,10 @@ export default { ...@@ -83,9 +84,10 @@ export default {
mounted() {}, mounted() {},
methods: { methods: {
logout() { logout() {
localStorage.removeItem('admin_token'); // localStorage.removeItem('admin_token');
this.$router.push("/Login2"); this.$router.push("/Login2");
location.reload(); removeToken()
// location.reload();
} }
} }
}; };
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment