Appearance
添加动态路由配置和权限控制
本节目标:理解“添加动态路由配置和权限控制”的核心思路,并能把它用于实际开发或面试表达。 主要是在beforEach钩子处理的; permission.beforeEach(router);
总体要实现,每进入一个新的路由:
- 判断用户是否有登录:
- 没有登录就要去登录,然后再统一进入下面的逻辑;具体就是就从location中取得ticket,然后用ticket换取token,如果没有location中没有ticket,则跳转到登录页面,然后登录后有了ticket,就可以进入到换取token,反正最后再进入下一个逻辑前,肯定是登录了的;
- 我们把所有其它情况都统一处理成,进入到这里时已经登录,然后获取一下后台返回的菜单和按钮权限,当然,如果已经获取过了,就不再获取;所以菜单权限发生变化了,要重新请求,一般刷新页面即可;
- 在处理后端返回数据时,我们在等着没有民航,然后从后端数据中得出当前用户的首页应该是什么;然后我们再根据返回的首页数据跳转到相应的首页;
- 如果应用菜单数据已经加载,我们返回一个空的首页,然后指示导航next(),即不用跳转到具体首页,正常导航即可;
具体细节 一、每一次进入到一个新的路由时,permission.beforeEach(router)都会调用一次; 二、它做的事件有:
- 先查看当前path,如果公开的访问地址如登录注册,直接放行;
- 否则,看是否有登录,主要依据就是cookie中的特定字段:
- 如果没有登录:
- 从地址栏中获取ticket;
- 如果有ticket,然后调用loginsByJson后台接口,从中获得用户的uuid和token,然后设置cookie值;
- 如果没有ticket,调用 store.dispatch('p8app/user/logout,做清理工作,重定向到统一登录页;
- 上面处理完,肯定是登录了,再处理一下后台返回的菜单和按钮权限数据,如果已经处理了,就不再处理;它主要是做以下事情:
- 我们会把后端返回的原始值也存在在store中;同时将后端返回的菜单和按钮数据处理成路由配置,菜单权限对应了相应的路由,按钮权限直接放在路由的meta信息中;
- 然后我们调用路由对象router的resetRouter方法,将得到的路由配置生效;
- 如果没有登录:
用户刷新页面的处理
- 当用户刷新页面时,如果是history路由,这个路径的请求会先到后端,后端会统一转到我们的入口html,接下来,前端的vue-router会接管对路由的处理,会从中取出to和from,对于刷新页面,from肯定是/,to的话就是之前浏览器中的href。
用户刷新页面时的处理流程
- 浏览器请求:
- 当用户刷新页面(例如按下浏览器的刷新按钮)时,浏览器会发送一个 HTTP 请求到服务器,请求当前的 URL 路径。例如,如果用户当前在 http://example.com/profile, 刷新页面时浏览器会向服务器发送请求 /profile。
- 服务器处理请求:
- 服务器接收到请求后,会处理这个路径。在典型的单页应用程序(SPA)中,服务器通常会将所有非静态资源的请求重定向到入口 HTML 文件(例如 index.html)。
- 这种处理方式确保了无论请求什么路径,服务器始终返回相同的 HTML 文件,使得前端的 JavaScript 应用可以接管路由逻辑。
- 前端应用初始化:
- 浏览器接收到 HTML 文件后,开始解析并加载其中包含的 JavaScript 文件。这时,前端的 Vue 应用程序会初始化并启动 Vue Router。
- Vue Router 在启动时,会读取浏览器的当前 URL 并解析成相应的路由对象。
- Vue Router 接管:
- Vue Router 在启动时,会触发导航守卫(如 beforeEach)。
- to 对象表示目标路由,即用户在刷新前所在的页面。
- from 对象表示来源路由。在页面刷新时,from 通常是根路径 / 或空对象,因为这是一个新的导航开始。
