• 微服务项目:尚融宝(29)(后端搭建:实现用户登录(2))


    认清现实,放弃幻想,准备斗争

    二、前端整合

    1、登录脚本

    pages/login.vue

    1. methods: {
    2. //登录
    3. login() {
    4. this.$axios
    5. .$post('/api/core/userInfo/login', this.userInfo)
    6. .then((response) => {
    7. // 把用户信息存在cookie中
    8. cookie.set('userInfo', response.data.userInfo)
    9. window.location.href = '/user'
    10. })
    11. },
    12. },

    2、页面头信息

    components/AppHeader.vue

    脚本

    一、后端的接口

    1、添加令牌校验接口

    service-core 中 UserInfoController添加令牌校验接口

    1. @ApiOperation("校验令牌")
    2. @GetMapping("/checkToken")
    3. public R checkToken(HttpServletRequest request) {
    4. String token = request.getHeader("token");
    5. boolean result = JwtUtils.checkToken(token);
    6. if(result){
    7. return R.ok();
    8. }else{
    9. //LOGIN_AUTH_ERROR(-211, "未登录"),
    10. return R.setResult(ResponseEnum.LOGIN_AUTH_ERROR);
    11. }
    12. }

    2、Swagger请求头添加header

    step1:service-base添加依赖

    1. <groupId>com.github.xiaoymingroupId>
    2. <artifactId>swagger-bootstrap-uiartifactId>
    3. <version>1.9.2version>

    step2:访问

    http://localhost:8110/doc.html

    step3:添加全局参数

     

    二、前端整合

    1、优化showInfo

    components/AppHeader.vue

    脚本

    1. showInfo() {
    2. // debugger
    3. let userInfo = cookie.get('userInfo')
    4. if (!userInfo) {
    5. console.log('cookie不存在')
    6. this.userInfo = null
    7. return
    8. }
    9. userInfo = JSON.parse(userInfo)
    10. //先在服务器端校验token
    11. this.$axios({
    12. url: '/api/core/userInfo/checkToken',
    13. method: 'get',
    14. headers: {
    15. //如果token校验成功,再展示user信息
    16. token: userInfo.token,
    17. },
    18. }).then((response) => {
    19. console.log('校验成功')
    20. this.userInfo = userInfo
    21. })
    22. },

    2、axios请求拦截(了解)

    可以在axios请求拦截器中统一添加header

    1. $axios.onRequest((config) => {
    2. // 添加请求头:token
    3. let userInfo = cookie.get('userInfo')
    4. if (userInfo) {
    5. console.log('添加header')
    6. userInfo = JSON.parse(userInfo)
    7. config.headers['token'] = userInfo.token
    8. }
    9. console.log('Making request to ' + config.url)
    10. })

    3、axios响应拦截(了解)

    plugins/axios.js:处理未登录状况

    1. $axios.onResponse((response) => {
    2. console.log('Reciving resposne', response)
    3. if (response.data.code === 0) {
    4. return response
    5. } else if (response.data.code === -211) {
    6. console.log('token校验失败')
    7. cookie.set('userInfo', '')
    8. //debugger
    9. //跳转到登录页面
    10. window.location.href = '/login'
    11. } else {
    12. Message({
    13. message: response.data.message,
    14. type: 'error',
    15. duration: 5 * 1000,
    16. })
    17. return Promise.reject(response)
    18. }
    19. })

     今日bug

     当前端的是post,后端是get的时候,也会出现跨域的问题

     api请求方式是否正确  注意get不要写成post

      dictList(id){
        return request ({
          // 与后端的接口,调用的是后端的controller
          url: `/admin/cmn/dict/findChildData/${id}`,
          method: 'get',
        })
      },

  • 相关阅读:
    vue+java 实现动态多列表头
    kali当中不同的python版本切换(超简单)
    软件测试-基本概念
    linux下安装工具——yum
    企业如何通过推特群推创造商机
    synchronized jvm实现思考
    SPA项目开发之动态树+数据表格+分页
    2-7.基金销售行为规范及信息管理
    elementui el-checkbox-group 单选,实现单选
    Unity json反序列化为 字典存储
  • 原文地址:https://blog.csdn.net/m0_62436868/article/details/126802677