实现登录,并且把token挂载到请求头

首先要在封装的axios拦截器当中配置

// 拦截器
instance.interceptors.request.use(config =>{
    // 部份接口需要拿到token
     let token = localStorage.getItem('token');

    token?config.headers.Authorization=token:null;

     return config;
},err=>{
    return Promise.reject(err)
});

回来创建一个vuex,省略vuex的安装过程…

在src目录下创建一个store文件夹,创建一个index的js文件,代码如下:

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

const store = new Vuex.Store({
    state:{
        token: localStorage.getItem('token') ? localStorage.getItem('token') : ''
    },
    mutations:{
        changeLogin(state,user){
        
            state.token = user.token;
            //回调函数传过来的token把他添加到浏览器本地存储
            localStorage.setItem('token',user.token)
        }
    }
})
export default store

弄好我们回去login组件

首先在data声明好表单接收的值:

loginfrom:{
            username: '',
            password:''
        },

接下来就是login函数

login(){
        //避免this指向问题
        const _this = this
        //加载状态为true
        _this.loading = true
        //判断表单username,password不能为空
        if (this.loginfrom.username === '' || this.loginfrom.password === '') {
             this.$message.error('用户名或密码不能为空');
        } else {
            //调用封装好的axios的Getlogin接口,并且把表单数据loginfrom传送给服务器
            Getlogin(this.loginfrom).then(res=>{
                //判断返回值,1为有错,0为成功
               if(res.data.status === 1){
                     this.$alert('账户或密码错误', '提示', {
                        confirmButtonText: '确定',
                        callback: action => {
                           _this.loading = false
                        }
                    });
                }else if(res.data.status === 0){
                     _this.userToken = res.data.token;
                    //token保存到vuex
                    _this.changeLogin({token:_this.userToken})
                    //设置一个时间差,让loading持续发生0.3毫秒后跳转路由,并且弹出成功信息
                    setTimeout(() => {
                        _this.loading = false
                        _this.$router.push({path:'/home',replace:true});
                        _this.$message({message:res.data.message,type:'success'});
                        
                    }, 300);
                }
            })
        }
    },

实现上传用户头像

利用element UI的图片上传组件,可能会涉及一些跨域的问题,相对应解决请求头的问题即可

				<el-upload	
                    :action="uploadExcel()"
                    list-type="picture-card"
                    :on-preview="handlePictureCardPreview"
                    :headers="myHeaders"
                    :on-success="success"
                    :on-remove="handleRemove">
                    <i class="el-icon-plus"></i>
                    </el-upload>
                    <el-dialog :visible.sync="dialogVisible">
                    <img width="100%" :src="dialogImageUrl" alt="">
                </el-dialog>

js部分:

//把上传的图片转化成base64格式,file是图片数据
File(file) {
                var reader = new FileReader();
                reader.readAsDataURL(file); //调用自带方法进行转换
                reader.onload = (e) => {
                //e.target.result为转变好的base64格式
                      let data = 						      {'avatar':`${e.target.result}`,'id':this.isdata.id}
//postavatar为axios封装好的接口回调函数,并且把data作为参数传送过去,不懂可以参加封装axios文章
                      Postavatar(data).then( res=>{
                                console.log(res.data);
                            })
                        };
            },
             
     //on-remove	文件列表移除文件时的钩子	function(file, fileList)
     handleRemove(file, fileList) {
                console.log(file, fileList);
            },
            //on-preview	点击文件列表中已上传的文件时的钩子	function(file)
            handlePictureCardPreview(file) {
                this.dialogImageUrl = file.url;
                this.dialogVisible = true;
            },
            //on-success	文件上传成功时的钩子	function(response, file, fileList)
            
            success(response, file, fileList){
                this.File( file.raw)
                // console.log(file);
            },
            //图片上传的请求头与url
            uploadExcel() {
            
            let token = localStorage.getItem('token');
            
            this.myHeaders.Authorization = token;
            let url = 'http://127.0.0.1:3007/my/update/avatar';
            return url;
        },