user
This commit is contained in:
parent
b474ff0fe2
commit
1c10eb152f
@ -15,6 +15,7 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"axios": "0.18.1",
|
"axios": "0.18.1",
|
||||||
|
"cryptorjs": "^3.0.0",
|
||||||
"element-ui": "^2.10.1",
|
"element-ui": "^2.10.1",
|
||||||
"js-cookie": "2.2.0",
|
"js-cookie": "2.2.0",
|
||||||
"moment": "^2.24.0",
|
"moment": "^2.24.0",
|
||||||
|
@ -30,6 +30,7 @@ export function login(data) {
|
|||||||
data,
|
data,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export function register(data) {
|
export function register(data) {
|
||||||
return request({
|
return request({
|
||||||
url: '/ldap-user-manage/',
|
url: '/ldap-user-manage/',
|
||||||
@ -37,6 +38,7 @@ export function register(data) {
|
|||||||
data,
|
data,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export function changePwd(data) {
|
export function changePwd(data) {
|
||||||
const id = data.id
|
const id = data.id
|
||||||
delete data.id
|
delete data.id
|
||||||
@ -47,6 +49,14 @@ export function changePwd(data) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function getInfo(params) {
|
||||||
|
return request({
|
||||||
|
url: '/ldap-user-manage/',
|
||||||
|
method: 'get',
|
||||||
|
params,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: del
|
// TODO: del
|
||||||
export function logout() {
|
export function logout() {
|
||||||
return request({
|
return request({
|
||||||
|
@ -5,28 +5,74 @@ import NProgress from 'nprogress' // progress bar
|
|||||||
import 'nprogress/nprogress.css' // progress bar style
|
import 'nprogress/nprogress.css' // progress bar style
|
||||||
import { getToken } from '@/utils/auth' // get token from cookie
|
import { getToken } from '@/utils/auth' // get token from cookie
|
||||||
import getPageTitle from '@/utils/get-page-title'
|
import getPageTitle from '@/utils/get-page-title'
|
||||||
|
import {encoded, decoded} from '@/utils/cryptor'
|
||||||
|
|
||||||
NProgress.configure({ showSpinner: false }) // NProgress Configuration
|
NProgress.configure({ showSpinner: false }) // NProgress Configuration
|
||||||
|
|
||||||
const whiteList = ['/login'] // no redirect whitelist
|
const whiteList = ['/login', '/register'] // no redirect whitelist
|
||||||
|
|
||||||
// router.beforeEach(async (to, from, next) => {
|
router.beforeEach(async(to, from, next) => {
|
||||||
// // start progress bar
|
// start progress bar
|
||||||
// NProgress.start()
|
NProgress.start()
|
||||||
|
|
||||||
// // set page title
|
// set page title
|
||||||
// document.title = getPageTitle(to.meta.title)
|
document.title = getPageTitle(to.meta.title)
|
||||||
|
|
||||||
// const accessRoutes = await store.dispatch('permission/generateRoutes', ['admin'])
|
// determine whether the user has logged in
|
||||||
// router.addRoutes(accessRoutes)
|
// const hasToken = getToken()
|
||||||
// next()
|
const token = getToken()
|
||||||
// })
|
|
||||||
|
|
||||||
router.afterEach(async() => {
|
if (token) {
|
||||||
// document.title = getPageTitle(to.meta.title)
|
if (to.path === '/login') {
|
||||||
|
// if is logged in, redirect to the home page
|
||||||
|
next({ path: '/' })
|
||||||
|
NProgress.done()
|
||||||
|
} else {
|
||||||
|
// determine whether the user has obtained his permission roles through getInfo
|
||||||
|
const hasRoles = store.getters.roles && store.getters.roles.length > 0
|
||||||
|
if (hasRoles) {
|
||||||
|
next()
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
// // get user info
|
||||||
|
// // note: roles must be a object array! such as: ['admin'] or ,['developer','editor']
|
||||||
|
const userInfo = await store.dispatch('user/getInfo')
|
||||||
|
|
||||||
const accessRoutes = await store.dispatch('permission/generateRoutes' , ['admin'])
|
const roles = userInfo.roles
|
||||||
|
|
||||||
|
// // generate accessible routes map based on roles
|
||||||
|
const accessRoutes = await store.dispatch('permission/generateRoutes', roles)
|
||||||
|
|
||||||
|
// // dynamically add accessible routes
|
||||||
router.addRoutes(accessRoutes)
|
router.addRoutes(accessRoutes)
|
||||||
|
|
||||||
|
// // hack method to ensure that addRoutes is complete
|
||||||
|
// // set the replace: true, so the navigation will not leave a history record
|
||||||
|
next()
|
||||||
|
} catch (error) {
|
||||||
|
// remove token and go to login page to re-login
|
||||||
|
await store.dispatch('user/resetToken')
|
||||||
|
Message.error(error || 'Has Error')
|
||||||
|
next(`/login?redirect=${to.path}`)
|
||||||
|
NProgress.done()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
/* has no token*/
|
||||||
|
|
||||||
|
if (whiteList.indexOf(to.path) !== -1) {
|
||||||
|
// in the free login whitelist, go directly
|
||||||
|
next()
|
||||||
|
} else {
|
||||||
|
// other pages that do not have permission to access are redirected to the login page.
|
||||||
|
next(`/login?redirect=${to.path}`)
|
||||||
|
NProgress.done()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
router.afterEach(() => {
|
||||||
// finish progress bar
|
// finish progress bar
|
||||||
NProgress.done()
|
NProgress.done()
|
||||||
})
|
})
|
@ -2,8 +2,9 @@ const getters = {
|
|||||||
sidebar: state => state.app.sidebar,
|
sidebar: state => state.app.sidebar,
|
||||||
device: state => state.app.device,
|
device: state => state.app.device,
|
||||||
token: state => state.user.token,
|
token: state => state.user.token,
|
||||||
avatar: state => state.user.avatar,
|
username: state => state.user.username,
|
||||||
name: state => state.user.name,
|
roles: state => state.user.toles,
|
||||||
permission_routes: state => state.permission.routes,
|
permission_routes: state => state.permission.routes,
|
||||||
|
|
||||||
}
|
}
|
||||||
export default getters
|
export default getters
|
||||||
|
@ -1,36 +1,40 @@
|
|||||||
import {login, logout, getInfo} from '@/api/user'
|
import {login, logout, getInfo} from '@/api/user'
|
||||||
import {getToken, setToken, removeToken} from '@/utils/auth'
|
import {getToken, setToken, removeToken} from '@/utils/auth'
|
||||||
|
import {encoded, decoded} from '@/utils/cryptor'
|
||||||
import router, {resetRouter} from '@/router'
|
import router, {resetRouter} from '@/router'
|
||||||
|
|
||||||
const state = {
|
const state = {
|
||||||
token: getToken(),
|
token: getToken(),
|
||||||
name: '',
|
username: '',
|
||||||
avatar: '',
|
roles: [],
|
||||||
}
|
}
|
||||||
|
|
||||||
const mutations = {
|
const mutations = {
|
||||||
SET_TOKEN: (state, token) => {
|
SET_TOKEN: (state, token) => {
|
||||||
state.token = token
|
state.token = token
|
||||||
},
|
},
|
||||||
SET_NAME: (state, name) => {
|
SET_USERNAME: (state, username) => {
|
||||||
state.name = name
|
state.username = username
|
||||||
|
console.log('SET_USERNAME', state.username)
|
||||||
},
|
},
|
||||||
SET_AVATAR: (state, avatar) => {
|
SET_ROLES: (state, roles) => {
|
||||||
state.avatar = avatar
|
state.roles = roles
|
||||||
|
console.log('SET_ROLES', state.roles)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
const actions = {
|
const actions = {
|
||||||
// user login
|
// user login
|
||||||
login({commit, dispatch}, userInfo) {
|
login({commit, dispatch}, userInfo) {
|
||||||
const {username, password} = userInfo
|
const {username, password, platform} = userInfo
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
login({username: username.trim(), password: password})
|
login({username: username.trim(), password: password, platform: platform})
|
||||||
.then(async response => {
|
.then(async response => {
|
||||||
const {data} = response
|
// const {data} = response
|
||||||
const roles = data.roles || ['admin']
|
const token = encoded(username)
|
||||||
commit('SET_TOKEN', data.token)
|
// console.log('login', response)
|
||||||
setToken(data.token)
|
commit('SET_TOKEN', token)
|
||||||
|
setToken(token)
|
||||||
resolve()
|
resolve()
|
||||||
})
|
})
|
||||||
.catch(error => {
|
.catch(error => {
|
||||||
@ -43,20 +47,31 @@ const actions = {
|
|||||||
// get user info
|
// get user info
|
||||||
getInfo({commit, state}) {
|
getInfo({commit, state}) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
getInfo(state.token)
|
const username = decoded(state.token)
|
||||||
|
if (!username) {
|
||||||
|
resolve({})
|
||||||
|
}
|
||||||
|
getInfo({search: username})
|
||||||
.then(response => {
|
.then(response => {
|
||||||
const {data} = response
|
const {data} = response
|
||||||
console.log(data)
|
const userInfo = data[0]
|
||||||
|
let roles = userInfo.o
|
||||||
|
|
||||||
if (!data) {
|
if (!userInfo) {
|
||||||
reject('Verification failed, please Login again.')
|
reject('Verification failed, please Login again.')
|
||||||
}
|
}
|
||||||
|
|
||||||
const {name, avatar} = data
|
if (roles.includes('pop-sys-admin')) roles = ['admin']
|
||||||
|
|
||||||
commit('SET_NAME', name)
|
commit('SET_USERNAME', userInfo.uid)
|
||||||
commit('SET_AVATAR', avatar)
|
commit('SET_ROLES', roles)
|
||||||
resolve(data)
|
|
||||||
|
// TODO:
|
||||||
|
console.log('userInfo', userInfo)
|
||||||
|
userInfo.roles = roles
|
||||||
|
|
||||||
|
|
||||||
|
resolve(userInfo)
|
||||||
})
|
})
|
||||||
.catch(error => {
|
.catch(error => {
|
||||||
reject(error)
|
reject(error)
|
||||||
|
@ -1,15 +1,13 @@
|
|||||||
import Cookies from 'js-cookie'
|
const TokenKey = 'token'
|
||||||
|
|
||||||
const TokenKey = 'vue_admin_template_token'
|
|
||||||
|
|
||||||
export function getToken() {
|
export function getToken() {
|
||||||
return Cookies.get(TokenKey)
|
return sessionStorage.getItem(TokenKey) || ''
|
||||||
}
|
}
|
||||||
|
|
||||||
export function setToken(token) {
|
export function setToken(token) {
|
||||||
return Cookies.set(TokenKey, token)
|
return sessionStorage.setItem(TokenKey, token)
|
||||||
}
|
}
|
||||||
|
|
||||||
export function removeToken() {
|
export function removeToken() {
|
||||||
return Cookies.remove(TokenKey)
|
return sessionStorage.removeItem(TokenKey)
|
||||||
}
|
}
|
||||||
|
14
src/utils/cryptor.js
Normal file
14
src/utils/cryptor.js
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
import cryptorjs from 'cryptorjs'
|
||||||
|
|
||||||
|
const myCryptor = new cryptorjs('yourSecretKey');
|
||||||
|
|
||||||
|
|
||||||
|
export function encoded(str) {
|
||||||
|
return myCryptor.encode(str);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export function decoded(str) {
|
||||||
|
return myCryptor.decode(str);
|
||||||
|
}
|
||||||
|
|
@ -2,6 +2,7 @@ import axios from 'axios'
|
|||||||
import {MessageBox, Message} from 'element-ui'
|
import {MessageBox, Message} from 'element-ui'
|
||||||
import store from '@/store'
|
import store from '@/store'
|
||||||
import {getToken} from '@/utils/auth'
|
import {getToken} from '@/utils/auth'
|
||||||
|
import {encoded, decoded} from '@/utils/cryptor'
|
||||||
|
|
||||||
// create an axios instance
|
// create an axios instance
|
||||||
const service = axios.create({
|
const service = axios.create({
|
||||||
@ -14,13 +15,17 @@ const service = axios.create({
|
|||||||
service.interceptors.request.use(
|
service.interceptors.request.use(
|
||||||
config => {
|
config => {
|
||||||
// do something before request is sent
|
// do something before request is sent
|
||||||
|
const token = store.getters.token
|
||||||
|
const username = store.getters.username
|
||||||
|
console.log(token, username, decoded(token))
|
||||||
|
|
||||||
if (store.getters.token) {
|
// if (decoded(token) !== username) {
|
||||||
// let each request carry token
|
// let each request carry token
|
||||||
// ['X-Token'] is a custom headers key
|
// ['X-Token'] is a custom headers key
|
||||||
// please modify it according to the actual situation
|
// please modify it according to the actual situation
|
||||||
config.headers['X-Token'] = getToken()
|
// config.headers['X-Token'] = getToken()
|
||||||
}
|
// return Promise.reject('permission denied!')
|
||||||
|
// }
|
||||||
return config
|
return config
|
||||||
},
|
},
|
||||||
error => {
|
error => {
|
||||||
@ -49,14 +54,12 @@ service.interceptors.response.use(
|
|||||||
Message({
|
Message({
|
||||||
message: data.errmsg || 'error',
|
message: data.errmsg || 'error',
|
||||||
type: 'error',
|
type: 'error',
|
||||||
duration: 5 * 1000
|
duration: 5 * 1000,
|
||||||
})
|
})
|
||||||
return Promise.reject(data.errmsg || 'error')
|
return Promise.reject(data.errmsg || 'error')
|
||||||
} else {
|
} else {
|
||||||
return response
|
return response
|
||||||
}
|
}
|
||||||
// TODO: 请求拦截
|
|
||||||
return response
|
|
||||||
},
|
},
|
||||||
error => {
|
error => {
|
||||||
console.log('err' + error) // for debug
|
console.log('err' + error) // for debug
|
||||||
|
@ -77,7 +77,6 @@
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { validUsername } from '@/utils/validate'
|
import { validUsername } from '@/utils/validate'
|
||||||
import { login } from '@/api/user'
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'Login',
|
name: 'Login',
|
||||||
@ -125,19 +124,6 @@ export default {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
login(data) {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
login(data)
|
|
||||||
.then(res => {
|
|
||||||
const data = res.data
|
|
||||||
resolve(data)
|
|
||||||
})
|
|
||||||
.catch(err => {
|
|
||||||
reject(err)
|
|
||||||
console.log(err)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
},
|
|
||||||
async handleLogin() {
|
async handleLogin() {
|
||||||
this.loading = true
|
this.loading = true
|
||||||
try {
|
try {
|
||||||
@ -146,11 +132,10 @@ export default {
|
|||||||
this.$message.error('请按要求填写表单!')
|
this.$message.error('请按要求填写表单!')
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
const data = JSON.parse(JSON.stringify(this.loginForm))
|
const result = await this.$store.dispatch('user/login', this.loginForm)
|
||||||
const result = await this.login(data)
|
|
||||||
this.loading = false
|
this.loading = false
|
||||||
this.$message.success('登录成功!')
|
this.$message.success('登录成功!')
|
||||||
this.$router.push('/')
|
this.$router.push({ path: this.redirect || '/' })
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
this.loading = false
|
this.loading = false
|
||||||
console.log(err)
|
console.log(err)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user