vue实现登录_获取token_拉取用户信息_后台管理系统系列

840 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

vue实现登录_获取token_拉取用户信息_后台管理系统系列

一、接上之前封装和跨域的文章来简单进行登录页面功能

​ 这里接上之前的;

第一步
//封装好的接口文件、获取的是一个模拟的接口
import { login } from './API_TYPE'
//封装的axios的post方法
import { POST } from './request'
在这里默认抛出一个匿名函数并准备接收*用户名*和*密码*
export default function (username, password) {
	//返回这个post方法,这样整个函数的返回值就还是一个promise对象
    return POST(login, {
        username,
        password
    })
}

文件名:login.js

上边代码我写成了一个文件,此文件仅作用这一个方法;也可以一个文件抛出多个方法;

第二步

再封装一个文件用来获取用户信息

文件名:getUserInfo.js

//封装的axios的get方法
import { GET } from './request'
//获取info时用到的接口
import { info } from './API_TYPE'
//这里向服务器发送一个token就好,服务器查找数据依靠的就是token
//token由用户名和密码在服务器验证成功后由服务器返回
export default function (token) {
    return GET(info, token)
}

这里布局用到了饿了么团队推出的 element-ui

<template>
  <div class="home">
    <el-form label-width="80px" :model="form" :rules="rules" ref="rulesForm">
      <h2 class="login_title">会员管理系统</h2>
      <el-form-item label="账号" prop="username">
        <el-input v-model="form.username" placeholder="请输入用户名"></el-input>
      </el-form-item>
      <el-form-item label="密码" prop="password">
        <el-input type="password" v-model="form.password" placeholder="请输入用户名"></el-input>
      </el-form-item>
      <el-form-item>
      //登录时触发的事件
        <el-button type="primary" @click="submitForm('rulesForm')" :plain="true">登录</el-button>
      </el-form-item>
    </el-form>
  </div>
</template>

<script>
//刚刚封装的login方法
import Login from "../API/Login";
//刚刚封装的GetUsetInfo方法
import GetUserInfo from "../API/GetUsetInfo";
export default {
  name: "Home",
  data() {
    return {
    //账号密码的双向绑定
      form: {
        username: "",
        password: ""
      },
      //账号密码的验证  验证可参考element表单组件的文档
      rules: {
        username: [
          { required: true, message: "账号不能为空", trigger: "blur" }
        ],
        password: [{ required: true, message: "密码不能为空", trigger: "blur" }]
      }
    };
  },
  methods: {
  //登录所触发的方法
    submitForm(formName) {
      // console.log(this.$refs[formName].validate);
     	//这是element-ui的一个验证方法
      this.$refs[formName].validate((valiType, errorMessage) => {
        if (valiType) {//验证成功
        //login方法中传入获取的用户名密码,得到回调的数据
          Login(this.form.username, this.form.password).then(response => {
            console.log(response.data);
            const res = response.data;
            //这里验证服务器返回的验证凭据
            if (res.data.code === 200) {
            //本地保存我们获取的token,便于之后的获取信息
              window.localStorage.setItem("token", res.data.data.token);
              //使用GetUserInfo方法传入token;执行回调;回调便返回用户的信息
              GetUserInfo(res.data.data.token).then(response => {
                console.log(response.data.data.data);
                window.localStorage.setItem(
                //储存用户的一些信息到本地
                  "userPermission",
                  JSON.stringify(response.data.data.data)
                );
                //这是element-UI的一个提示框
                this.loginY();
                //跳转路由到登陆成功后的页面
                this.$router.push("/layout");
              });
            } else {
              console.log("信息返回错误");
              return false;
            }
          });
        } else {//验证失败
          console.log("error:", errorMessage);
          return false;
        }
      });
    },
    loginY() {
      this.$message({
        message: "恭喜你,登陆成功!",
        type: "success"
      });
    }
  }
};
</script>
<style lang="scss">
.home {
  width: 100vw;
  height: 100vh;
  background: url(../assets/login.jpg);
  overflow: hidden;
  .el-form {
    width: 340px;
    margin: 160px auto;
    padding: 25px 30px;
    background: rgba(255, 255, 255, 0.8);
    border-radius: 20px;
    .login_title {
      text-align: center;
      padding: 20px;
      color: #303133;
    }
  }
}
</style>

至此;在登陆后的页面根据用户的信息渲染头像用户名等数据即可

代码的关键部分已经打上注释

后面会持续更新关于后台管理系统方面的逻辑