# 登录授权流程
打开系统首页,会自动跳转到登录页面/login,输入用户名跟密码,系统默认用户名superadmin,密码admin,点击登录,调用/api/Auth/Login接口,接口返回一个包含accessToken跟refreshToken的对象,登录成功返回的对象结构如下
会根据登录时是否选择了
记住我复选框返回不同缓存时间的refreshToken
//登录返回结果对象
{
code:0,
message:"",
data:{
status:"SUCCESS",
accessToken:"xxxxxxxxxxxxxxxxxxxxxxxxxxx",
accessExpiresIn:3600,
refreshToken:"xxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
refreshExpiresIn:86400
}
}
前端将accessToken跟refreshToken存放在localStorage中进行缓存,然后跳转到后台主页/,在跳转路由钩子上(详见/src/router/index.js文件),会检测是否已登录(是否缓存accessToken)、是否已获取认证信息(菜单权限信息),然后会调用接口/api/Auth/GetAuthInfo接口,并带上accessTtoken信息,(了解token是怎么传递的)获取当前登录用户所拥有的菜单及权限,返回结果结构如下所示
//获取认证信息返回结果对象
{
code:0,
message:"",
data:{
userId:-1,
userName:"",
permissionMenus:[
{
id:2,
name:"用户管理",
path:"user",
parentId:1,
icon:null,
isPage:false,
canRead:true,
canWrite:true,
canReview:false
},
{
id:1,
name:"系统管理",
path:"sys",
icon:null,
isPage:false,
parentId:null,
canRead:true,
canWrite:true,
canReview:false
},
...
]
}
}
前端会把permissionMenus数组再进行递归循环构建fullPath(完整路径),permissionPath(权限路径)字段(详见/src/router/index.js),然后将数组保存在Vuex用于permission权限对象方法判断权限使用,再递归构建成出菜单数组menus及路由数组layoutRouter(此时的菜单数组与路由数组是不同的,原来的版本是相同的,但后期为了完美实现tab多页面标签功能,所以路由数组改成单层结构)路由数组结构,如下所示
[
{
name:"layout",
path: '',
component: layout,//这是根据不同配置加载的不同布局组件
children: [
{
path: "/index",
component: _import("index"),
meta: {
id: -1,
title: "主页",
canMultipleOpen:false
}
},
{
path: "/sys/user",
component: _import("/sys/user/"),
meta: {
id: 2,
title: "用户管理",
canMultipleOpen:false
}
},
...
]
}
]
构建好后,addRoutes到VueRouter中,并将menus保存在Vuex中,用于构建菜单,获取后认证信息后,就继续路由的执行next(),打开后台主页,至此,整个登录认证的流程就完成了。
# 刷新Token
当accessToken过期时,接口会返回code为1002的错误代码,此时框架会自动通过缓存的accessToken跟refreshToken调用/api/Auth/RefreshToken接口进行刷新accessToken跟refreshToken,具体代码可看/utils/request.js文件