调通登陆
This commit is contained in:
parent
e92cbe180f
commit
368dea2229
|
@ -6,6 +6,8 @@ type User struct {
|
||||||
gorm.Model
|
gorm.Model
|
||||||
Username string
|
Username string
|
||||||
Password string
|
Password string
|
||||||
|
Uuid string
|
||||||
|
Name string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (User) TableName() string {
|
func (User) TableName() string {
|
||||||
|
|
|
@ -40,7 +40,12 @@ func (AuthController) Login(c *gin.Context) {
|
||||||
token := jwt.GenToken(json.Username)
|
token := jwt.GenToken(json.Username)
|
||||||
redistool.Set(rediskey.AUTH_TOKEN+":"+json.Username, token, time.Hour*20)
|
redistool.Set(rediskey.AUTH_TOKEN+":"+json.Username, token, time.Hour*20)
|
||||||
context.SetUser(c, user)
|
context.SetUser(c, user)
|
||||||
c.JSON(http.StatusOK, resp.Success(token))
|
c.JSON(http.StatusOK, resp.Success(map[string]string{
|
||||||
|
"username": user.Username,
|
||||||
|
"uuid": user.Uuid,
|
||||||
|
"name": user.Name,
|
||||||
|
"token": token,
|
||||||
|
}))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Logout 退出
|
// Logout 退出
|
||||||
|
|
3
web/.env
3
web/.env
|
@ -3,9 +3,6 @@
|
||||||
# 页面 title 前缀
|
# 页面 title 前缀
|
||||||
VUE_APP_TITLE=D2Admin
|
VUE_APP_TITLE=D2Admin
|
||||||
|
|
||||||
# 网络请求公用地址
|
|
||||||
VUE_APP_API=/api/
|
|
||||||
|
|
||||||
; # 仓库地址
|
; # 仓库地址
|
||||||
; VUE_APP_REPO=https://github.com/d2-projects/d2-admin-start-kit
|
; VUE_APP_REPO=https://github.com/d2-projects/d2-admin-start-kit
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@ NODE_ENV=production
|
||||||
VUE_APP_TITLE=D2Admin
|
VUE_APP_TITLE=D2Admin
|
||||||
|
|
||||||
# 网络请求公用地址
|
# 网络请求公用地址
|
||||||
VUE_APP_API=http://localhost:8001/api
|
VUE_APP_API=http://localhost:8001
|
||||||
|
|
||||||
# 国际化配置
|
# 国际化配置
|
||||||
VUE_APP_I18N_LOCALE=zh-chs
|
VUE_APP_I18N_LOCALE=zh-chs
|
||||||
|
|
|
@ -2,3 +2,6 @@
|
||||||
|
|
||||||
# 页面 title 前缀
|
# 页面 title 前缀
|
||||||
VUE_APP_TITLE=D2Admin
|
VUE_APP_TITLE=D2Admin
|
||||||
|
|
||||||
|
# 网络请求公用地址
|
||||||
|
VUE_APP_API=http://localhost:8001
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
VUE_APP_TITLE=D2Admin
|
VUE_APP_TITLE=D2Admin
|
||||||
|
|
||||||
# 网络请求公用地址
|
# 网络请求公用地址
|
||||||
VUE_APP_API=/api/
|
VUE_APP_API=http://localhost:8001
|
||||||
|
|
||||||
# 国际化配置
|
# 国际化配置
|
||||||
VUE_APP_I18N_LOCALE=zh-chs
|
VUE_APP_I18N_LOCALE=zh-chs
|
||||||
|
|
|
@ -7,7 +7,7 @@ NODE_ENV=production
|
||||||
VUE_APP_TITLE=D2Admin
|
VUE_APP_TITLE=D2Admin
|
||||||
|
|
||||||
# 网络请求公用地址
|
# 网络请求公用地址
|
||||||
VUE_APP_API=/api/
|
VUE_APP_API=http://localhost:8001
|
||||||
|
|
||||||
# 国际化配置
|
# 国际化配置
|
||||||
VUE_APP_I18N_LOCALE=zh-chs
|
VUE_APP_I18N_LOCALE=zh-chs
|
||||||
|
|
|
@ -86,4 +86,9 @@ import { mapActions } from 'vuex'
|
||||||
this.login()
|
this.login()
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### 请求带token关键代码
|
||||||
|
```text
|
||||||
|
web/src/api/service.js
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,31 +0,0 @@
|
||||||
import { find, assign } from 'lodash'
|
|
||||||
|
|
||||||
const users = [
|
|
||||||
{ username: 'admin', password: 'admin', uuid: 'admin-uuid', name: 'Admin' },
|
|
||||||
{ username: 'editor', password: 'editor', uuid: 'editor-uuid', name: 'Editor' },
|
|
||||||
{ username: 'user1', password: 'user1', uuid: 'user1-uuid', name: 'User1' }
|
|
||||||
]
|
|
||||||
|
|
||||||
export default ({ service, request, serviceForMock, requestForMock, mock, faker, tools }) => ({
|
|
||||||
/**
|
|
||||||
* @description 登录
|
|
||||||
* @param {Object} data 登录携带的信息
|
|
||||||
*/
|
|
||||||
SYS_USER_LOGIN (data = {}) {
|
|
||||||
// 模拟数据
|
|
||||||
mock
|
|
||||||
.onAny('/login')
|
|
||||||
.reply(config => {
|
|
||||||
const user = find(users, tools.parse(config.data))
|
|
||||||
return user
|
|
||||||
? tools.responseSuccess(assign({}, user, { token: faker.random.uuid() }))
|
|
||||||
: tools.responseError({}, '账号或密码不正确')
|
|
||||||
})
|
|
||||||
// 接口请求
|
|
||||||
return requestForMock({
|
|
||||||
url: '/login',
|
|
||||||
method: 'post',
|
|
||||||
data
|
|
||||||
})
|
|
||||||
}
|
|
||||||
})
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
export default ({ service, request, tools }) => ({
|
||||||
|
/**
|
||||||
|
* @description 登录
|
||||||
|
* @param {Object} data 登录携带的信息
|
||||||
|
*/
|
||||||
|
SYS_USER_LOGIN (data = {}) {
|
||||||
|
// 接口请求
|
||||||
|
return request({
|
||||||
|
url: '/login',
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
|
@ -25,20 +25,34 @@ function createService () {
|
||||||
// dataAxios 是 axios 返回数据中的 data
|
// dataAxios 是 axios 返回数据中的 data
|
||||||
const dataAxios = response.data
|
const dataAxios = response.data
|
||||||
// 这个状态码是和后端约定的
|
// 这个状态码是和后端约定的
|
||||||
const { code } = dataAxios
|
const { errorCode } = dataAxios
|
||||||
// 根据 code 进行判断
|
// 根据 errorCode 进行判断
|
||||||
if (code === undefined) {
|
if (errorCode === undefined) {
|
||||||
// 如果没有 code 代表这不是项目后端开发的接口 比如可能是 D2Admin 请求最新版本
|
// 如果没有 code 代表这不是项目后端开发的接口 比如可能是 D2Admin 请求最新版本
|
||||||
return dataAxios
|
return dataAxios
|
||||||
} else {
|
} else {
|
||||||
// 有 code 代表这是一个后端接口 可以进行进一步的判断
|
// 有 errorCode 代表这是一个后端接口 可以进行进一步的判断
|
||||||
switch (code) {
|
switch (errorCode) {
|
||||||
case 0:
|
case 200:
|
||||||
// [ 示例 ] code === 0 代表没有错误
|
// [ 示例 ] errorCode === 200 代表没有错误
|
||||||
return dataAxios.data
|
return dataAxios.data
|
||||||
case 'xxx':
|
case 10000:
|
||||||
// [ 示例 ] 其它和后台约定的 code
|
errorCreate(`[ code: 10000 ] ${dataAxios.msg}: ${response.config.url}`)
|
||||||
errorCreate(`[ code: xxx ] ${dataAxios.msg}: ${response.config.url}`)
|
break
|
||||||
|
case 10001:
|
||||||
|
errorCreate(`[ code: 10001 ] ${dataAxios.msg}: ${response.config.url}`)
|
||||||
|
break
|
||||||
|
case 10002:
|
||||||
|
errorCreate(`[ code: 10002 ] ${dataAxios.msg}: ${response.config.url}`)
|
||||||
|
break
|
||||||
|
case 10003:
|
||||||
|
errorCreate(`[ code: 10003 ] ${dataAxios.msg}: ${response.config.url}`)
|
||||||
|
break
|
||||||
|
case 10004:
|
||||||
|
errorCreate(`[ code: 10004 ] ${dataAxios.msg}: ${response.config.url}`)
|
||||||
|
break
|
||||||
|
case 10005:
|
||||||
|
errorCreate(`[ code: 10005 ] ${dataAxios.msg}: ${response.config.url}`)
|
||||||
break
|
break
|
||||||
default:
|
default:
|
||||||
// 不是正确的 code
|
// 不是正确的 code
|
||||||
|
@ -49,8 +63,11 @@ function createService () {
|
||||||
},
|
},
|
||||||
error => {
|
error => {
|
||||||
const status = get(error, 'response.status')
|
const status = get(error, 'response.status')
|
||||||
|
const data = get(error, 'response.data')
|
||||||
|
console.log(data)
|
||||||
switch (status) {
|
switch (status) {
|
||||||
case 400: error.message = '请求错误'; break
|
case 400:
|
||||||
|
error.message = data.msg; break
|
||||||
case 401: error.message = '未授权,请登录'; break
|
case 401: error.message = '未授权,请登录'; break
|
||||||
case 403: error.message = '拒绝访问'; break
|
case 403: error.message = '拒绝访问'; break
|
||||||
case 404: error.message = `请求地址出错: ${error.response.config.url}`; break
|
case 404: error.message = `请求地址出错: ${error.response.config.url}`; break
|
||||||
|
|
|
@ -24,6 +24,8 @@ export default {
|
||||||
// token 代表用户当前登录状态 建议在网络请求中携带 token
|
// token 代表用户当前登录状态 建议在网络请求中携带 token
|
||||||
// 如有必要 token 需要定时更新,默认保存一天
|
// 如有必要 token 需要定时更新,默认保存一天
|
||||||
util.cookies.set('uuid', res.uuid)
|
util.cookies.set('uuid', res.uuid)
|
||||||
|
util.cookies.set('username', res.username)
|
||||||
|
util.cookies.set('name', res.name)
|
||||||
util.cookies.set('token', res.token)
|
util.cookies.set('token', res.token)
|
||||||
// 设置 vuex 用户信息
|
// 设置 vuex 用户信息
|
||||||
await dispatch('d2admin/user/set', { name: res.name }, { root: true })
|
await dispatch('d2admin/user/set', { name: res.name }, { root: true })
|
||||||
|
@ -43,6 +45,8 @@ export default {
|
||||||
// 删除cookie
|
// 删除cookie
|
||||||
util.cookies.remove('token')
|
util.cookies.remove('token')
|
||||||
util.cookies.remove('uuid')
|
util.cookies.remove('uuid')
|
||||||
|
util.cookies.remove('username')
|
||||||
|
util.cookies.remove('name')
|
||||||
// 清空 vuex 用户信息
|
// 清空 vuex 用户信息
|
||||||
await dispatch('d2admin/user/set', {}, { root: true })
|
await dispatch('d2admin/user/set', {}, { root: true })
|
||||||
// 跳转路由
|
// 跳转路由
|
||||||
|
|
Loading…
Reference in New Issue