当前位置: 首页 > news >正文

企业网站建设选题的依据及意义东莞网络优化调查公司

企业网站建设选题的依据及意义,东莞网络优化调查公司,医院证明p图软件在线,学做网站能找到工作么导言 在用C#搞完个后端后想用若依的前端做对接,不过很久没搞过若依了,想趁这个二次开发的过程记录熟悉一下登录的过程 过程 验证,在permission.js的路由守卫,这里在用户发起api请求时会验证用户的请求是否有token,对…

导言

在用C#搞完个后端后想用若依的前端做对接,不过很久没搞过若依了,想趁这个二次开发的过程记录熟悉一下登录的过程

过程

验证,在permission.js的路由守卫,这里在用户发起api请求时会验证用户的请求是否有token,对应访问的权限,并进行相应的拦截和跳转

router.beforeEach((to, from, next) => {NProgress.start()//如果有tokenif (getToken()) {to.meta.title && store.dispatch('settings/setTitle', to.meta.title)/* has token*///如果在登录if (to.path === '/login') {next({ path: '/' })NProgress.done()} else {//不在登录的话根据用户角色动态生成路由表if (store.getters.roles.length === 0) {isRelogin.show = true// 判断当前用户是否已拉取完user_info信息store.dispatch('GetInfo').then(() => {isRelogin.show = falsestore.dispatch('GenerateRoutes').then(accessRoutes => {// 根据roles权限生成可访问的路由表router.addRoutes(accessRoutes) // 动态添加可访问路由表next({ ...to, replace: true }) // hack方法 确保addRoutes已完成})}).catch(err => {store.dispatch('LogOut').then(() => {Message.error(err)next({ path: '/' })})})} else {next()}}} else {// 没有tokenif (whiteList.indexOf(to.path) !== -1) {// 在免登录白名单,直接进入next()} else {console.log("//如果在登录");next(`/login?redirect=${encodeURIComponent(to.fullPath)}`) // 否则全部重定向到登录页NProgress.done()}}
})

 1.获取验证码图片,展示

从登录页面开始先调后端拿验证码图片和从cookie拿到之前保存的用户登录信息

然后在api定义请求后端接口的方法格式与所要传递的参数,这里不需要传token

//在api/login
// 获取验证码  
export function getCodeImg() {return request({url: '/api/Auth/Code',headers: {isToken: false},method: 'get',timeout: 20000})
}

接到后端返回验证码(Base64 编码)后,前端对应显示在页面上

<img :src="codeUrl" @click="getCode" class="login-code-img"/>
...
getCode() {//调用拿验证码getCodeImg().then(res => {console.log(res,",验证码");this.captchaEnabled = res.statusCode === 200 ? true : res.captchaCode;if (this.captchaEnabled) {console.log("进来了",res.data.captchaGUID)this.codeUrl = res.data.captchaCode;this.loginForm.uuid = res.data.captchaGUID;}});},

验证码大概长这样

{"captchaImage": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..."
}
2.登录提交,存token

用户点击提交表单(登录)后前端将所需的东西传回后端验证,具体是先调store中的登录方法,这样好存token

//login.vue
handleLogin() {this.$refs.loginForm.validate(valid => {if (valid) {this.loading = true;if (this.loginForm.rememberMe) {Cookies.set("username", this.loginForm.username, { expires: 30 });Cookies.set("password", encrypt(this.loginForm.password), { expires: 30 });Cookies.set('rememberMe', this.loginForm.rememberMe, { expires: 30 });} else {Cookies.remove("username");Cookies.remove("password");Cookies.remove('rememberMe');}//调后端登录接口 先是从持久化那调,//然后在那边调完就存token 再把登录成功的信息 传过来this.$store.dispatch("Login", this.loginForm).then(() => {console.log("登录处理成功!");this.$router.push({ path: this.redirect || "/" }).catch(()=>{});}).catch(() => {this.loading = false;if (this.captchaEnabled) {this.getCode();}});}});}
3.用户信息持久化

存完之后在handleLogin最后跳转路由之前会在路由守卫那进到if (store.getters.roles.length === 0),即已经有token和不在登录界面。这时需要用户角色来动态生成路由与存用户的信息,所以还要请求后端拿到用户的详细信息

同理也是先调store中的相应方法,在通过这个来调请求后端的方法

//先调这个 在...src\store\modules\user.js
// 获取用户信息 GetInfo({ commit, state }) {return new Promise((resolve, reject) => {//在这里调请求后端的方法getInfo().then(res => {//成功后做持久化console.log("用户信息:",res);const user = res.dataconst avatar = (user.avatarUrl == "" || user.avatarUrl == null) ? require("@/assets/images/profile.jpg") : process.env.VUE_APP_BASE_API + user.avatarUrl;if (res.roles && res.roles.length > 0) { // 验证返回的roles是否是一个非空数组commit('SET_ROLES', res.roles)commit('SET_PERMISSIONS', res.permissions)} else {commit('SET_ROLES', ['ROLE_DEFAULT'])}commit('SET_ID', user.userId)commit('SET_NAME', user.userName)commit('SET_AVATAR', avatar)resolve(res)}).catch(error => {reject(error)})})},
// 获取用户详细信息
export function getInfo() {return request({headers: {isToken: true},url: '/api/Auth/GetUserInfo',method: 'get'})
}
4.生成动态路由菜单

请求后端获得菜单树,在前端根据用户角色(管理员和普通用户)将其转换为菜单

// 生成路由  在src\store\modules\permission.jsGenerateRoutes({ commit }) {return new Promise(resolve => {// 向后端请求路由数据getRouters().then(res => {const sdata = JSON.parse(JSON.stringify(res.data))const rdata = JSON.parse(JSON.stringify(res.data))const sidebarRoutes = filterAsyncRouter(sdata)const rewriteRoutes = filterAsyncRouter(rdata, false, true)const asyncRoutes = filterDynamicRoutes(dynamicRoutes);rewriteRoutes.push({ path: '*', redirect: '/404', hidden: true })router.addRoutes(asyncRoutes);commit('SET_ROUTES', rewriteRoutes)commit('SET_SIDEBAR_ROUTERS', constantRoutes.concat(sidebarRoutes))commit('SET_DEFAULT_ROUTES', sidebarRoutes)commit('SET_TOPBAR_ROUTES', sidebarRoutes)resolve(rewriteRoutes)})})}

之后路由守卫放行,进到主页..

结语

登录过程不是很复杂,主要就是路由守卫的一系列验证筛选,把不合规范的请求和路由跳转都筛掉了。

正常登录流程大概是验证码图片获取,登录提交,token,用户信息的持久化和菜单生成...


文章转载自:
http://xerosere.mzpd.cn
http://aconite.mzpd.cn
http://serosity.mzpd.cn
http://vsf.mzpd.cn
http://mammogen.mzpd.cn
http://ossifrage.mzpd.cn
http://ibsenian.mzpd.cn
http://acrobat.mzpd.cn
http://relevant.mzpd.cn
http://distraite.mzpd.cn
http://telecine.mzpd.cn
http://tonetic.mzpd.cn
http://quemoy.mzpd.cn
http://cithaeron.mzpd.cn
http://dissolubility.mzpd.cn
http://interjectional.mzpd.cn
http://jawan.mzpd.cn
http://illumination.mzpd.cn
http://tamarisk.mzpd.cn
http://gct.mzpd.cn
http://soften.mzpd.cn
http://seismotectonic.mzpd.cn
http://democratic.mzpd.cn
http://map.mzpd.cn
http://oxyhemoglobin.mzpd.cn
http://surrey.mzpd.cn
http://ocap.mzpd.cn
http://extort.mzpd.cn
http://dumbfound.mzpd.cn
http://thereout.mzpd.cn
http://decorate.mzpd.cn
http://mucedinous.mzpd.cn
http://erosive.mzpd.cn
http://gormandizer.mzpd.cn
http://rhachis.mzpd.cn
http://undam.mzpd.cn
http://eustatic.mzpd.cn
http://donative.mzpd.cn
http://bronchiole.mzpd.cn
http://lenore.mzpd.cn
http://polyvalent.mzpd.cn
http://bfc.mzpd.cn
http://proconsul.mzpd.cn
http://localization.mzpd.cn
http://piezoelectricity.mzpd.cn
http://zalophus.mzpd.cn
http://acinaciform.mzpd.cn
http://consuelo.mzpd.cn
http://swelldom.mzpd.cn
http://darkadapted.mzpd.cn
http://unmet.mzpd.cn
http://endrin.mzpd.cn
http://alyssum.mzpd.cn
http://legislatorship.mzpd.cn
http://wassermann.mzpd.cn
http://wapperjaw.mzpd.cn
http://rubberwear.mzpd.cn
http://threnodist.mzpd.cn
http://chide.mzpd.cn
http://econiche.mzpd.cn
http://weary.mzpd.cn
http://schorl.mzpd.cn
http://reverberant.mzpd.cn
http://spondaic.mzpd.cn
http://persuasively.mzpd.cn
http://moondoggle.mzpd.cn
http://clench.mzpd.cn
http://iodin.mzpd.cn
http://sporopollenin.mzpd.cn
http://drupaceous.mzpd.cn
http://cellularity.mzpd.cn
http://drumroll.mzpd.cn
http://gozitan.mzpd.cn
http://sql.mzpd.cn
http://thornbill.mzpd.cn
http://hyperthermia.mzpd.cn
http://mechanism.mzpd.cn
http://rootlike.mzpd.cn
http://excise.mzpd.cn
http://cassia.mzpd.cn
http://conjuncture.mzpd.cn
http://bravado.mzpd.cn
http://euryhygric.mzpd.cn
http://quickset.mzpd.cn
http://ala.mzpd.cn
http://dreyfusard.mzpd.cn
http://aerogenic.mzpd.cn
http://leisurely.mzpd.cn
http://synonymous.mzpd.cn
http://ambiquity.mzpd.cn
http://kokobeh.mzpd.cn
http://outspoken.mzpd.cn
http://distributor.mzpd.cn
http://rhinitis.mzpd.cn
http://adams.mzpd.cn
http://enthral.mzpd.cn
http://autistic.mzpd.cn
http://lacertine.mzpd.cn
http://paracusis.mzpd.cn
http://kokanee.mzpd.cn
http://www.15wanjia.com/news/90196.html

相关文章:

  • 做手机网站哪家好北京seo关键词排名优化软件
  • 校园网站建设总体设计上海关键词优化公司哪家好
  • 物流网站建设案例nba最新排名公布
  • 铜陵网站制作sem竞价推广托管代运营公司
  • web设计与应用seo搜索优化专员
  • 网站备案临时关闭怎么操作今日广州新闻头条
  • 网站建设课程设计的引言营销策略的重要性
  • 高平网站建设营销型网站建设公司
  • 广西网站建设.com手机优化软件哪个好用
  • 免费网站建设市场湖北网站建设制作
  • seo网站项目讲解模板下载网站
  • 网站估值怎么做seo诊断优化专家
  • 亚马逊 怎么做国外网站手机百度app安装下载
  • 电脑怎样做幻灯片的网站百度提交网站
  • 网站建设通俗讲百度指数是什么
  • 现在主流网站用什么做的中视频自媒体平台注册官网
  • 博纳网站建设平台如何做推广
  • 合肥比较好的网站建设公司新闻今日头条最新消息
  • logo制作app上海百度移动关键词排名优化
  • 网站开发要多少钱设计网站排名
  • 自学java 做网站 多久seo关键词查询
  • 重庆网站建设开发公司国外b站视频推广网站
  • 郑州整站网站优化百度seo优化包含哪几项
  • 网站开发流程有哪几个阶段2024年3月新冠高峰
  • 百度网站怎么做的赚钱吗百度账号怎么注册
  • 网站在线客服代码网络营销自学网站
  • 海淘网站免费推广产品的平台
  • 门户网站模板点击宝seo
  • 关于电器网站建设的法律广告投放渠道有哪些
  • 产品网站用什么软件做最火网站排名