Vue-cli实现登录和重置功能

Vue-cli实现登录和重置功能

1. 项目初始化
① 安装Vue脚手架 npm install -g @vue/cli
② 通过Vue脚手架创建项目:在cmd命令行中输入 vue ui,使用图形化界面创建项目
③配置Vue路由,配置Elment-UI组件库,配置axios库:通过添加插件和依赖安装以上配置
在这里插入图片描述
2. 后台项目的环境配置
① 安装mysql数据库
② 安装Node.js环境
③ 配置项目相关信息:安装phpstudy,通过MySQL管理器导入vue_api_server中db的mydb_sql,输入密码root,选择文件所在位置,还原数据库名为mydb(将vue_api_server放在桌面上导入),选择MySQL工具,点击打开数据库目录,看到文件夹mydb中有文件就代表数据库导入成功
④ 使用node启动本地服务器:在vue_api_server中先npm i,再使用node app.js启动本地服务器,就可看到接口
⑤ 使用Postman测试后台项目接口是否正常
在这里插入图片描述
3. 创建登录组件布局
在Login.vue文件中,使用elment-ui组件进行布局

<template>
    <div class="login_container">
        <div class="login_box">
            <!-- 头像区域 -->
            <div class="avatar_box">
                <img src="../assets/logo.png" alt="">
            </div>
            <!-- 登录表单区域 -->
            <el-form ref="loginFormRef" :model="loginForm" :rules="loginFormRules" label-width="0px" class="login_form">
                <!-- 用户名 -->
                <el-form-item prop="username">
                    <el-input v-model="loginForm.username" prefix-icon="iconfont icon-user"></el-input>
                </el-form-item>
                <!-- 密码 -->
                <el-form-item prop="password">
                    <el-input v-model="loginForm.password" prefix-icon="iconfont icon-3702mima" type="password"></el-input>
                </el-form-item>
                <!-- 按钮区域 -->
                <el-form-item class="btns">
                    <el-button type="primary" @click="login">登录</el-button>
                    <el-button type="info" @click="resetLoginForm">重置</el-button>
                </el-form-item>
            </el-form>
        </div>
    </div>
</template>

4. 验证登录

<script>
export default {
    data () {
        return {
            // 登录表单的数据绑定区域
            loginForm: {
                username: 'zs',
                password: '123'
            },     
            // 表单的验证规则对象   
            loginFormRules: {
                // 验证用户名是否合法
                username: [
                    { required: true, message: '请输入登录名称', trigger: 'blur' },
                    { min: 3, max: 10, message: '长度在 3 到 10 个字符', trigger: 'blur' }
                ],
                // 验证密码是否合法
                password: [
                    { required: true, message: '请输入登录密码', trigger: 'blur' },
                    { min: 6, max: 15, message: '长度在 6 到 15 个字符', trigger: 'blur' }
                ]
            }
        }
    },
    methods: {
        // 点击重置按钮,重置登录表单
        resetLoginForm(){
            // console.log(this)
            this.$refs.loginFormRef.resetFields();
        },
        login(){
            this.$refs.loginFormRef.validate(async valid => {
                if(!valid) return;
                const {data: res} = await this.$http.post('login', this.loginForm);
                if(res.meta.status != 200) return console.log("登录失败!")
                console.log("登录成功!")
            });
        }
    }
}
</script>

5. 登录成功或失败后的消息提示
对登陆成功或失败给出消息提示,调用element-ui的Message组件
导入Message:

// 导入弹框提示组件
import { Message } from 'element-ui'
// 将Message组件挂载到Vue组件原型上,可通过this访问到$message,就可进行弹框提示
Vue.prototype.$message = Message

使用方法:

if(res.meta.status != 200) return this.$message.error("登录失败!")
this.$message.success("登录成功");

在这里插入图片描述
6. 登录成功后保存token并跳转到后台主页
1. 将登录成功之后的token,保存到客户端的sessionStorage中
1.1 项目中除了登录之外的其他API接口,必须在登录之后才能访问
1.2 token只应在当前网站打开期间生效,所以将token保存在sessionStorage中
window.sessionStorage.setItem('token', res.data.token);
2. 通过编程式导航跳转到后台主页,路由地址是 /home :this.$router.push('/home');
7. 路由导航守卫
如果用户没有登录,但是直接通过URL访问特定页面,需要重新导航到登录页面

// 挂载路由导航守卫
router.beforeEach((to, from , next) => {
  // to 将要访问的路径
  // from 代表从哪个路径跳转而来
  // next 是一个函数,表示放行 next()放行  next('/login')强制跳转
  if(to.path == '/login') return next()
  // 获取token
  const tokenStr = window.sessionStorage.getItem('token')
  if(!tokenStr) return next('/login')
  next()
})

export default router

8.通过axios请求拦截器添加token,保证拥有获取数据的权限
在每次调用API接口前,必须在请求头中使用Authorization字段提供token令牌
在main.js中配置请求根路径时加上headers中加上Authorization属性

import axios from 'axios'
// 配置请求的根路径
axios.defaults.baseURL = 'http://127.0.0.1:8888/api/private/v1/'
axios.interceptors.request.use(config =>{
  console.log(config)
  config.headers.Authorization = window.sessionStorage.getItem('token')
  // 最后必须return config,规定写法
  return config
})
Vue.prototype.$http = axios
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值