登录后显示用户信息

161 篇文章 16 订阅

一 后端获取用户信息接口

web层

/**
* 功能描述:根据token获取登录信息
*
* @param request http请求
* @return R 返回给前端的数据
* @author cakin
* @date 2020/12/27
*/
@ApiOperation(value = "根据token获取登录信息")
@GetMapping("get-login-info")
public R getLoginInfo(HttpServletRequest request) {
    try {
        JwtInfo jwtInfo = JwtUtils.getMemberIdByJwtToken(request);
        return R.ok().data("userInfo", jwtInfo);
    } catch (Exception e) {
        log.error("解析用户信息失败:" + e.getMessage());
        throw new GuliException(ResultCodeEnum.FETCH_USERINFO_ERROR);
    }
}

二 前端整合

1 api

  // 获取用户登录信息
  getLoginInfo() {
    return request({
      baseURL: 'http://localhost:8160',
      url: '/api/ucenter/member/get-login-info',
      method: 'get'
      // 通过请求头发送token
    //   headers: { 'token': cookie.get('guli_jwt_token') }
    })
  }

2 获取用户信息的脚本

<script>
import loginApi from '~/api/login'
import cookie from 'js-cookie'


export default {
  data() {
    return {
      userInfo: null
    }
  },


  created() {
    this.getUserInfo()
  },


  methods: {
    getUserInfo() {
      // 如果cookie中的token值不存在,则无需获取用户信息
      if (!cookie.get('guli_jwt_token')) {
        return
      }

      // 如果token存在,则携带token的值向服务器发起请求
      loginApi.getLoginInfo().then(response => {
        // 渲染页面
        this.userInfo = response.data.userInfo
      })
    }
  }
}
</script>

3 登录后显示用户信息

        <ul class="h-r-login">
          <li v-if="!userInfo" id="no-login">
            <a href="/login" title="登录">
              <em class="icon18 login-icon">&nbsp;</em>
              <span class="vam ml5">登录</span>
            </a>
            |
            <a href="/register" title="注册">
              <span class="vam ml5">注册</span>
            </a>
          </li>
          <!-- 注意undis将当前节点隐藏了 -->
          <li v-if="userInfo" id="is-login-one" class="mr10">
            <a id="headerMsgCountId" href="#" title="消息">
              <em class="icon18 news-icon">&nbsp;</em>
            </a>
            <q class="red-point">&nbsp;</q>
          </li>
          <!-- 注意undis将当前节点隐藏了 -->
          <li v-if="userInfo" id="is-login-two" class="h-r-user">
            <a href="/ucenter" title>
              <img
                :src="userInfo.avatar"
                width="30"
                height="30"
                class="vam picImg"
                alt
              >
              <span id="userName" class="vam disIb">{{ userInfo.nickname }}</span>
            </a>
            <a href="javascript:void(0)" title="退出" class="ml5" @click="logout()">退出</a>
          </li>
          <!-- /未登录显示第1 li;登录后显示第2,3 li -->
        </ul>

4 登出

html注册事件

<a href="javascript:void(0)" title="退出" class="ml5" @click="logout()">退出</a>

登出脚本

    logout() {
      // 清除cookie
      cookie.set('guli_jwt_token', '', { domain: 'localhost' })
      // 跳转页面
      window.location.href = '/'
    }

三 前端拦截器

1 统一发送header

让所有请求都自动在header中携带token:

utils/request.js中修改请求拦截器,此时login.js中不用传递header信息

import cookie from 'js-cookie'

// http request 拦截器
service.interceptors.request.use(
  config => {
    // 当cookie中获取到了token信息时,则将token放在header中随请求发送给服务端接口
    if (cookie.get('guli_jwt_token')) {
      config.headers['token'] = cookie.get('guli_jwt_token')
    }
    return config
  },
  error => {
    return Promise.reject(error)
  }
)

2 用户信息获取失败处理

utils/request.js

在响应拦截器中显示错误消息

  response => {
    /**
       * code为非20000是抛错 可结合自己业务进行修改
       */
    const res = response.data
    if (res.code === 20000) { // 返回正确的结果
      return response.data
    } else if (res.code === 23004) { // 获取用户信息失败
      // 清除cookie
      cookie.set('guli_jwt_token', '', { domain: 'localhost' })
      return response.data
    } else { // 其他错误的结果
      Message({
        message: res.message || 'error',
        type: 'error',
        duration: 5 * 1000
      })
      return Promise.reject('error')
    }
  }

四 测试

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,如果用户登录成功后需要显示用户信息,可以通过 JavaScript 实现。具体实现方式如下: 1. 在登录成功后,后端返回用户信息,例如用户名、头像等。 2. 在前端页面中,添加一个用于显示用户信息的 div 元素,例如: ```html <div id="user-info"></div> ``` 3. 在 JavaScript 中,获取用户信息,并将其显示在 div 元素中。例如: ```javascript // 获取用户信息 fetch('/user/info') .then(response => response.json()) .then(data => { // 将用户信息显示在 div 元素中 const userInfoDiv = document.getElementById('user-info'); userInfoDiv.innerHTML = `Welcome, ${data.username}! <img src="${data.avatar}" alt="avatar">`; }); ``` 在上面的代码中,我们使用了 fetch 函数来获取用户信息,该函数返回一个 Promise 对象。在 Promise 对象的回调函数中,我们将用户信息显示在 div 元素中。需要注意的是,我们在用户信息中包含了一个头像,用于显示用户的头像。 需要注意的是,如果用户登录,后端应该返回一个错误状态码,例如 401,表示未授权。在 JavaScript 中,我们可以通过检查状态码来判断用户是否已登录,例如: ```javascript fetch('/user/info') .then(response => { if (response.status === 401) { // 用户登录,重定向到登录页面 window.location.href = '/login'; } else { return response.json(); } }) .then(data => { // 将用户信息显示在 div 元素中 const userInfoDiv = document.getElementById('user-info'); userInfoDiv.innerHTML = `Welcome, ${data.username}! <img src="${data.avatar}" alt="avatar">`; }); ``` 在上面的代码中,我们检查了状态码,如果状态码为 401,则表示用户登录,我们将页面重定向到登录页面;否则,我们继续获取用户信息显示在页面中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值