美文网首页
09-2 项目完善.md

09-2 项目完善.md

作者: 时修七年 | 来源:发表于2019-03-03 19:16 被阅读0次

    登录注册鉴权

    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 ,可以正常打开了。

    相关文章

      网友评论

          本文标题:09-2 项目完善.md

          本文链接:https://www.haomeiwen.com/subject/abemuqtx.html