完善登录功能

123 阅读1分钟

获取用户信息后跳转到后台页 image.png 但是刷新页面后信息就没了 image.png

放入actions中获取

  actions:{
    // 获取当前登录页面信息
    actionGetInFo( {commit} ){
        return new Promise((resolve,reject) => {
          getInfo().then(res => {
            commit("SET_USERINFO",res)
            resolve(res)
          }).catch(err => reject(err))
        })
    }
  }

在permission中

router.beforeEach(async (to,from,next) => {
    const token = getToken()

    // 没有登录,强制跳转回登录页
    if(!token && to.path != "/login"){
      toast("请您先登录","error")
      return next('/login')
    }
    // 防止用户重复登录 登陆后又进入登录页
    if(token && to.path == "/login"){
      toast("请勿重复登陆","error")
      return next({ path:from.path ? from.path : "/"})
    }

    // 如果用户登录了 自动获取用户信息 并放在vuex中
    if(token){
      await store.dispatch("actionGetInFo")
    }
    next()
})

store. index.js中

import { createStore } from "vuex";
import { login , getInfo } from '@/api/manager'
import { setToken } from "@/composables/auth"
const store = createStore({
  state() {
    return{
      // 用户信息
      user:{}
    }
  },
  mutations:{
    // 记录用户信息
    SET_USERINFO(state,user){
        state.user = user
        console.log(state.user);
    }
  },
  actions:{
    // 登录方法
    actionLogin( {commit} , { username,password }){
        return new Promise((resolve,reject) => {
          login(username,password).then(res => {
              setToken(res.token)
              resolve(res)
          }).catch(err => {
              reject(err)
          })
        })
    }, 
    // 获取当前登录页面信息
    actionGetInFo( {commit} ){
        return new Promise((resolve,reject) => {
          getInfo().then(res => {
            commit("SET_USERINFO",res)
            resolve(res)
          }).catch(err => reject(err))
        })
    }
  }
})

export default store

login.vue 很简洁

const onSubmit = () => {
  // validate对整个表单的内容进行验证。 接收一个回调函数,或返回 Promise
  formRef.value.validate((valid) => {
    if (!valid) {
      return false
    }
    loading.value = true
    store.dispatch('actionLogin', form).then(res=>{
      toast("恭喜!登陆成功!","success")
      router.push('/')
    }).finally(()=>{
      loading.value = false
    })
  })
}

// 监听回车事件
function onKeyUp(e){
  if(e.key == "Enter") onSubmit()
}

// 添加键盘监听 页面加载完毕后
onMounted(() => {
  document.addEventListener("keyup",onKeyUp)
})
// 页面卸载前
onBeforeUnmount(() => {
  document.removeEventListener("keyup",onKeyUp)
})