调通登陆

This commit is contained in:
骑着蜗牛追导弹 2024-02-04 19:40:48 +08:00
parent e92cbe180f
commit 368dea2229
12 changed files with 65 additions and 49 deletions

View File

@ -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 {

View File

@ -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 退出

View File

@ -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

View File

@ -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

View File

@ -2,3 +2,6 @@
# 页面 title 前缀 # 页面 title 前缀
VUE_APP_TITLE=D2Admin VUE_APP_TITLE=D2Admin
# 网络请求公用地址
VUE_APP_API=http://localhost:8001

View File

@ -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

View File

@ -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

View File

@ -86,4 +86,9 @@ import { mapActions } from 'vuex'
this.login() this.login()
``` ```
### 请求带token关键代码
```text
web/src/api/service.js
```

View File

@ -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
})
}
})

View File

@ -0,0 +1,14 @@
export default ({ service, request, tools }) => ({
/**
* @description 登录
* @param {Object} data 登录携带的信息
*/
SYS_USER_LOGIN (data = {}) {
// 接口请求
return request({
url: '/login',
method: 'post',
data
})
}
})

View File

@ -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

View File

@ -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 })
// 跳转路由 // 跳转路由