09-2 项目完善.md

登录注册鉴权

vuex

在store的modules 中新建user.js

import AUTH from '@/apis/Auth'

// 相当于data里面的数据
const state = {
  userData: {},

}
// 相当于computed
const getters = {
  userName: state=> state.userData.userName || '未',
  isLogin: state=> state.userData.isLogin
}

const mutations = {
  setUserData(state,payload){
    state.userData = payload.userData
  }
}

const actions = {
  getUserInfo({commit}) {
    return AUTH.getInfo()
      .then(res=>{
        commit('setUserData',{userData: res})
      })
  },
  logout({commit}) {
    return AUTH.logout()
      .then(res=>{
        commit('setUserData',{userData: {}})
      })
  }
}

export default {
  state,
  getters,
  mutations,
  actions
}



在login.vue中

onLogin(name) {
      this.$refs[name].validate((valid) => {
            if (valid) {
              Auth.login(this.loginForm).then(
                res=>{
                // 获取用户信息
                this.$store.dispatch('getUserInfo').then(response=>{
                  this.$refs[name].resetFields()
                   this.$router.push('/notebooks')
                   this.$Message.success({
                      content: `${res.data.username},欢迎您使用印象笔记`,
                      duration: 6
                  })
                })
                }
              ).catch(err=>{
                  this.$Message.error(err.msg)
              })
            } else {
                return
            }
          })
    },

登录鉴权的常用方法

登录鉴权目前主要有两种方法,一种是使用beforeEach方法,另一种是在axios响应拦截里面获取登录状态

beforeEach鉴权

缺点:
1、依赖全局数据,处理起来麻烦
2、为了解决vuex刷新失败问题,需要在全局组件设置
3、如果身份过期,无法同步更新

在main.js中

// 注意这里beforeEach必须写在挂载实例之前否则刷新页面或者在地址栏直接输入地址不会执行
router.beforeEach((to,from,next)=>{
  if(!store.getters.isLogin && to.path!=='/login'){
    router.push('/login')
  }else{
    next()
  }
})

axios响应拦截鉴权

// 4.响应拦截
axios.interceptors.response.use(
  response => response,
  error => {
    if (error.response.status === 401) {
      console.log(error.response.data.data[0])
      Message.error(error.response.data.data[0])
      route.push('/login');
      return
    } else {
      Message.error('系统错误');
    }
    return Promise.reject(error);
  }
);

项目发布上线

发布到 Githubpages

我们完成项目后,可以执行 npm run build 生成可编译后的代码,代码在 dist 目录下。下一步需要做的事就是把 dist 目录下的文件推送到 github 上。

第一步创建项目

在 github 上建立项目如 hellonote,拷贝项目地址 如:xxx

第二步设置自动化上传脚本

修改 pacakage.json, 加入如下 script

  "scripts": {
    "upload": "cd dist; git init; git remote remove origin; git remote add origin xxx.git; git add . ; git commit -m '打包发布上线' ;git push -f origin master && exit 0"
  },


或者在命令行

cd dist
git init
git remote remove origin
git remote add origin xxx.git // 仓库ssh链接
git pull  // 如果这一步不行,走下面三条命令
---
git fetch
git reset
git pull
---
git add ./
git commit -m 'publish'
git push

第三步

终端下执行

npm run build
npm run upload

上传后,我们在 github 当前项目的设置里设置 githubpages


gitpage.png

之后,我们就能点击上图生成的链接预览网站了

但是

出现了报错,检查元素一看,资源全是404。原因是配置打包时静态资源路径的问题。

因为我们让 js 打包在 html 里的路径是/assets 开头,而 githubpages 是有二级路径的,以/assets 开头实际上是加载的资源,路径明显不对。 所以,我们需要修改 webpack 打包的配置。

image.png

再次 build 并 upload ,可以正常打开了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • ## 框架和库的区别?> 框架(framework):一套完整的软件设计架构和**解决方案**。> > 库(lib...
    Rui_bdad阅读 2,953评论 1 4
  • 从18年7月16号入职到现在已经5个月多了,入职之后就一直使用vue,来这边温习记录下使用的步骤。在我的理解中vu...
    拖孩阅读 1,942评论 2 12
  • vue-login-intercept 一个 Vue.js 的小demo 介绍 项目地址,有喜欢的欢迎 star ...
    无亦情阅读 12,146评论 4 21
  • _________________________________________________________...
    fastwe阅读 1,395评论 0 0
  • 项目地址https://github.com/hongchh/timeline-x 一、成品展示 二、项目需求 添...
    前端杨肖阅读 9,395评论 0 10