IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> vue pc商城项目 ----------登录 -> 正文阅读

[JavaScript知识库]vue pc商城项目 ----------登录

目录

?注册登录

注册---------通过数据库存储用户信息(名字,密码)

登录过后首页用户信息进行展示

退出登录

导航守卫

全局守卫

路由独享守卫

组件内守卫


?注册登录

注册---------通过数据库存储用户信息(名字,密码)

登录---------登录成功的时候,后台为了区分这个用户是谁,服务器下发token【令牌唯一表示】
前台持久化存储token【带着token找服务器要用户信息进行展示】

vuex 不是持久化存储

网络请求

//登录
const reqLogin = (data) => {
  return axios.post('/api/user/passport/login', data)
}
//获取用户信息
const reqUserInfo = () => {
  return axios.get('/api/user/passport/auth/getUserInfo')
}
//退出登录
const reqlogoOut = () => {
  return axios.get('/api/user/passport/logout')
}

登录事件

   async userLogin() {
        try {
          const {
            phone,
            password
          } = this;
          (phone && password) && await this.$store.dispatch('AsyncLogin', {
            phone,
            password
          })
          this.$router.push('/Home')
        } catch (e) {
          console.log(e.message);
        }

vuex

import axios from '@/api'
// user 组件的小仓库
const state = {
  code: '',
  token: localStorage.getItem('Token'),
  userinfo: ''
}
const mutations = {
  userLogin(state, payload) {
    state.token = payload
  },
  GetUserInfo(state, payload) {
    state.userinfo = payload
  },
  CLEAR(state) {
    state.token = ''
    state.userinfo = ''
    localStorage.removeItem('Token')
  }
}
const actions = {
  async AsyncLogin({
    commit
  }, data) {
    let result = await axios.reqLogin(data)
    console.log(result);
    if (result.code == 200) {
      commit('userLogin', result.data.token)
      localStorage.setItem('Token', result.data.token)
      return 'ok'
    } else {
      return Promise.reject(new Error('false'))
    }
  },
  async asyncUserInfo({
    commit
  }) {
    let result = await axios.reqUserInfo()
    console.log(result);
    if (result.code == 200) {
      commit('GetUserInfo', result.data)
      return 'ok'
    } else {
      return Promise.reject(new Error('false'))
    }
  },
  async asyncUserOut({
    commit
  }) {
    let result = await axios.reqlogoOut()
    if (result.code == 200) {
      commit('CLEAR')
      return 'ok'
    } else {
      return Promise.reject(new Error('false'))
    }
  }
}
const getters = {}
export default {
  state,
  mutations,
  actions,
  getters
}

?

登录过后首页用户信息进行展示

当用户注册完成,用户登录【用户名+密码】向服务器发请求(组件派发 AsyncLogin)

登录成功后获取token,存储与仓库当中(非持久化存储),路由跳转到home

在首页当中(mounted)中派发 action??asyncUserInfo 动态展示用户信息

持久化存储token

退出登录

清除 后台token 用户信息 本地token

跳转到home

  async logoOut(){
      //退出登录发送请求 清楚token 用户信息
      try{
        await this.$store.dispatch('asyncUserOut')
        this.$router.push('/Home')
      }catch(e){
        //TODO handle the exception
        e.message
      }
    },

导航守卫

导航:表示路由正在发生变化

守卫:紫禁城的护卫

全局守卫

举例子:紫禁城【皇帝,太后,妃子】紫禁城大门守卫都要排查

只要发生路由变化,守卫就能监听到

router.beforeEach(?(to, from, next) => {}))

? //to:可以获取到你要跳转到哪个路由信息
? // from::可以获取到你从哪个路由来的信息
? // next : 放行函数 可以放行到指定的路由

可以做token过期处理 控制路由跳转

router里可以单独引入仓库import store from '@/store'

// 配置路由的地方
import Vue from 'vue'
import VueRouter from 'vue-router'
import routes from './router'
import store from '@/store'
//使用插件
Vue.use(VueRouter)
let router = new VueRouter({
  routes,
});
// 全局守卫,前置守卫 在路由跳转之前进行判断
router.beforeEach(async (to, from, next) => {
  //to:可以获取到你要跳转到哪个路由信息
  // from::可以获取到你从哪个路由来的信息
  // next : 放行函数 可以放行到指定的路由
  let token = store.state.user.token
  let name = store.state.user.userinfo.name;
  if (token) {
    //用户已经登录了,去login(不让去,停留在首页)
    if (to.path == '/login') {
      next('/')
    } else {
      // 登录去的不是login,
      if (name) {
        next()
      } else {
        // 没有用户信息。派发action ,让仓库存储用户信息 进行跳转
        try {
          await store.dispatch('asyncUserInfo')
          next()
        } catch (e) {
          // token 失效,获取不到用户信息,清除token 重新登录,
          await store.dispatch('asyncUserOut')
        }
      }

    }
  } else {
    //登录了去的不是login,直接放行
    next()
  }
})
export default router

路由独享守卫

举例子:紫禁城【皇帝,太后,妃子】相对应的【皇帝,太后,妃子】路上守卫

组件内守卫

举例子;我要去皇帝的屋子,已经到了皇帝屋子的外面了(进入了)

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-07-03 10:40:34  更:2022-07-03 10:40:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 12:56:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码