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

wordpress网站提速江苏省建设工程造价信息网官网

wordpress网站提速,江苏省建设工程造价信息网官网,建设很行官方网站,linux系统上的wordpress文章目录 本次更新整体流程概述1. 用户登录流程前端登录处理 (login.vue)后端登录处理 (AuthServiceImpl.java) 2. 用户信息存储机制前端状态管理 (member.js) 3. 后续请求的身份验证登录拦截器 (LoginInterceptor.java)前端请求携带token 4. 获取用户信息获取用户信息接口 (Us…

文章目录

    • 本次更新
    • 整体流程概述
    • 1. 用户登录流程
      • 前端登录处理 (`login.vue`)
      • 后端登录处理 (`AuthServiceImpl.java`)
    • 2. 用户信息存储机制
      • 前端状态管理 (`member.js`)
    • 3. 后续请求的身份验证
      • 登录拦截器 (`LoginInterceptor.java`)
      • 前端请求携带token
    • 4. 获取用户信息
      • 获取用户信息接口 (`UserController.java`)
      • 前端获取和存储用户信息
    • 安全设计考虑
    • 综上所述

本次更新

在小程序端获取并保存当前用户的详细信息,支持后续对用户信息的使用。

在这里插入图片描述

整体流程概述

整个用户信息管理流程可以分为以下几个关键步骤:

  1. 用户登录:前端发送登录请求,后端验证并返回token
  2. 信息存储:前端存储token并获取用户详细信息
  3. 后续请求:每次请求携带token进行身份验证
  4. 信息获取:通过存储的token获取用户信息

下面我将详细分析每个环节的实现。

1. 用户登录流程

前端登录处理 (login.vue)

在前端的handleLogin方法中,主要完成了以下工作:

async handleLogin() {// 验证输入...// 发送登录请求const res = await post('/user/login', {username: this.loginForm.username,password: this.loginForm.password})// 存储tokenconst memberStore = useMemberStore()memberStore.setToken(res)uni.setStorageSync('token', res)// 获取用户详细信息并存储const userInfoRes = await get('/user/getUserInfo')memberStore.setUserInfo(userInfoRes)// 跳转逻辑...
}
  1. 前端发送登录请求到/user/login接口,携带用户名和密码
  2. 登录成功后,将返回的token存储到Pinia状态管理和uni-app的本地存储中
  3. 随后立即调用/user/getUserInfo获取用户详细信息并存储

后端登录处理 (AuthServiceImpl.java)

后端登录逻辑主要位于AuthServiceImpl类中:

public Result<String> login(UserLoginDTO loginDTO) {// 查询用户User user = this.getOne(new LambdaQueryWrapper<User>().eq(User::getUsername, loginDTO.getUsername()));// 验证用户存在性和密码if (user == null) return Result.fail(ErrorCode.USER_NOT_EXIST);if (!Md5Util.getMD5String(loginDTO.getPassword()).equals(user.getPassword())) {return Result.fail(ErrorCode.PASSWORD_ERROR);}// 生成JWT tokenMap<String, Object> claims = new HashMap<>();claims.put("id", user.getId());claims.put("username", user.getUsername());String token = JwtUtil.genToken(claims);// 将token存入RedisredisService.set(token, token, 1, TimeUnit.HOURS);return Result.success(token);
}
  1. 验证用户名和密码
  2. 生成包含用户ID和用户名的JWT token
  3. 将token存入Redis,设置1小时有效期
  4. 返回token给前端

2. 用户信息存储机制

前端状态管理 (member.js)

前端使用Pinia进行状态管理,关键代码如下:

const profile = ref({token: '',       // 登录令牌userInfo: null   // 用户详细信息
})// 设置token
const setToken = (token) => {profile.value.token = token || ''
}// 设置用户信息
const setUserInfo = (userInfo) => {profile.value.userInfo = userInfo || null
}// 持久化配置
{persist: {storage: {getItem(key) {return uni.getStorageSync(key)},setItem(key, value) {uni.setStorageSync(key, value)},},}
}
  1. 使用profile对象存储token和用户信息
  2. 提供setTokensetUserInfo方法更新状态
  3. 配置了持久化存储,将状态同步到uni-app的本地存储中

这种设计实现了:

  • 内存中快速访问用户信息
  • 页面刷新后仍能保持登录状态
  • 统一的用户信息管理接口

3. 后续请求的身份验证

登录拦截器 (LoginInterceptor.java)

后端通过拦截器验证每个请求的身份:

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 从请求头获取tokenString token = request.getHeader("Authorization");try {// 从Redis验证token有效性String redisToken = operations.get(token);if (redisToken==null) throw new RuntimeException();// 解析token获取用户信息Map<String, Object> claims = JwtUtil.parseToken(token);// 存储到ThreadLocal中供后续使用ThreadLocalUtil.set(claims);return true;} catch (Exception e) {response.setStatus(401);return true;}
}
  1. Authorization请求头获取token
  2. 检查Redis中是否存在该token(确保未过期)
  3. 解析token获取用户信息并存入ThreadLocal
  4. 验证失败返回401状态码

前端请求携带token

前端在member.js中提供了获取token的方法:

// 获取token
const getToken = () => {return profile.value.token
}

在发起API请求时,前端应该从store中获取token并添加到请求头中:

const token = memberStore.getToken()
const res = await request({url: '/api/protected',headers: {'Authorization': token}
})

4. 获取用户信息

获取用户信息接口 (UserController.java)

后端提供获取用户信息的接口:

@GetMapping("/getUserInfo")
public Result<UserVO> getUserInfo() {return userService.getUserInfo();
}

前端获取和存储用户信息

前端在登录成功后立即获取用户信息:

// 获取用户详细信息并存储
const userInfoRes = await get('/user/getUserInfo')
memberStore.setUserInfo(userInfoRes)

之后可以通过store随时获取(我亲爱的队友们,请你们关注这里):

const memberStore = useMemberStore()
const userInfo = memberStore.getUserInfo()

安全设计考虑

  1. Token有效期:后端设置token 1小时有效期(Redis中)
  2. 密码安全:后端存储密码的MD5哈希值而非明文
  3. 信息最小化:Token中只包含必要信息(id和username)
  4. HTTPS传输:虽然代码中未体现,但生产环境应使用HTTPS

综上所述

这套用户信息管理机制实现了:

  1. 安全的登录流程:验证用户名密码后生成有时效性的token
  2. 前后端状态同步:前端存储token和用户信息,后端验证每个请求
  3. 持久化存储:即使刷新页面也能保持登录状态
  4. 便捷的信息获取:通过store可以随时获取当前用户信息

文章转载自:

http://qsUQm9Ag.qncmn.cn
http://IUavP9GZ.qncmn.cn
http://8fZCeB62.qncmn.cn
http://dEy7CPfr.qncmn.cn
http://yTjgdRXG.qncmn.cn
http://iX0NmDls.qncmn.cn
http://kxCOoaPM.qncmn.cn
http://EGjfzBHv.qncmn.cn
http://jkzpMnyH.qncmn.cn
http://cEeVOd4j.qncmn.cn
http://D95UQkJa.qncmn.cn
http://DnTwTSVF.qncmn.cn
http://Tm0fMcn2.qncmn.cn
http://A6uPKiju.qncmn.cn
http://Ot12WvXk.qncmn.cn
http://Li4KR8du.qncmn.cn
http://uxiV2LEO.qncmn.cn
http://ztzBUJ9Q.qncmn.cn
http://INfcAnC9.qncmn.cn
http://jwhDxQVk.qncmn.cn
http://W1kcxDDL.qncmn.cn
http://DFrHdsj2.qncmn.cn
http://UCu1Jl6g.qncmn.cn
http://uisRFNFn.qncmn.cn
http://N2TfGqXc.qncmn.cn
http://2s8AiUkH.qncmn.cn
http://s6tzWhyE.qncmn.cn
http://hYAqWm13.qncmn.cn
http://EAZZ2UyV.qncmn.cn
http://z43lCaBF.qncmn.cn
http://www.dtcms.com/wzjs/750342.html

相关文章:

  • 做国外网站的零售公众号模板免费
  • 网友让你建网站做商城百度云登录入口官网
  • 网站域名修改泰安网站制作公司电话
  • 编程和做网站有关系吗wordpress 站外搜索
  • 广州网站建设乐云seo导购网站模板免费下载
  • 盐城网站建设哪家快南昌专业网站优化推广
  • 连云港建设公司网站网站建设结束的售后服务
  • 网站分页设计作用辽宁省工程建设招标网
  • 装修大全优化关键词排名
  • 网站首页建设网站威海市高区建设局网站
  • 个人如何申请网站做搜狗pc网站
  • 绵阳建设局网站免备案手机网站
  • 网站怎么做下拉刷新页面数据推广品牌的方法
  • flash网站制作下载医疗器械有哪些产品
  • 东莞做微网站wordpress下载最新版本
  • 成都建站模板网站开发网站开发介绍人拿多少钱
  • 制作网站建设规划书的结构为妇幼医院网站建设方案
  • 正规营销型网站培训中心做网站实名认证总是失败怎么回事
  • 淘宝客是以下哪个网站的会员简称wordpress 浮动代码
  • 做彩票网站推广犯法吗建设网站需要数据库备份
  • 建设一个网站要多郑州众志seo
  • 做印刷广告的图片在哪个网站找国外免费源码共享网站
  • 广西桂平建设局网站河北涿州建设局网站
  • dw 8做的网站怎么上传网站建设英文怎么写
  • sae 网站备案自己可以免费做网站吗
  • 做网站东莞看盘神器app
  • php做不了大型网站吗响应式网站源代码
  • 软装设计案例网站开封北京网站建设
  • 郑州网站优化工资浙江省建设协会网站首页
  • 网站开发了下载文件需要网页开发的流程或者步骤是什么