如何通过vue和Element-plus实现用户的登录和注册功能

首先,下面先介绍一下Vue和Element-plus的基本概念。

Vue是一个用于构建用户界面的渐进式框架,它允许你从简单的方式开始而逐渐地增加复杂性,它使用声明式的模板语法让你将界面抽象为一个组件树,且每个组件都可以拥有自己的状态和行为。

Element-plus则是Vue组件库中较为流行的一个组件库,它提供了大量的可复用的UI组件,可以帮助你更好地构建用户界面。

1. 创建Vue项目

首先我们需要在本地安装Vue-cli,这个可以通过npm包管理器来完成,命令如下:

npm install -g vue-cli

Vue-cli可以帮助我们快速创建Vue项目,我们可以通过下面的命令来创建一个新的Vue项目:

vue create my-project

1.1 创建登录和注册页面

我们需要创建两个页面,一个是登录页面,另一个是注册页面。我们可以在src文件夹下创建两个新的Vue组件,命名为Login.vue和Register.vue。

下面是Login.vue文件的内容:

<template>

<div>

<h2>登录</h2>

<el-form :model="form" ref="form" :rules="rules" label-width="80px" class="demo-ruleForm">

<el-form-item label="用户名" prop="username">

<el-input v-model="form.username" autocomplete="off"></el-input>

</el-form-item>

<el-form-item label="密码" prop="password">

<el-input type="password" v-model="form.password" autocomplete="off"></el-input>

</el-form-item>

<el-form-item>

<el-button type="primary" @click="submitForm('form')">登录</el-button>

<el-button @click="resetForm('form')">重置</el-button>

</el-form-item>

</el-form>

</div>

</template>

<script>

export default {

data() {

return {

form: {

username: '',

password: ''

},

rules: {

username: [{ required: true, message: '请输入用户名', trigger: 'blur' }],

password: [{ required: true, message: '请输入密码', trigger: 'blur' }]

}

};

},

methods: {

submitForm(formName) {

this.$refs[formName].validate(valid => {

if (valid) {

//login logic

} else {

console.log('error submit!!');

return false;

}

});

},

resetForm(formName) {

this.$refs[formName].resetFields();

}

}

};

</script>

上面的代码中,我们利用Element-plus中的Form组件,实现了一个简单的登录表单,其中form数据对象中包含了用户名和密码这两个数据项。submitForm和resetForm分别是提交表单和重置表单的函数。

下面是Register.vue文件的内容:

<template>

<div>

<h2>注册</h2>

<el-form :model="form" ref="form" :rules="rules" label-width="80px" class="demo-ruleForm">

<el-form-item label="用户名" prop="username">

<el-input v-model="form.username" autocomplete="off"></el-input>

</el-form-item>

<el-form-item label="密码" prop="password">

<el-input type="password" v-model="form.password" autocomplete="off"></el-input>

</el-form-item>

<el-form-item label="确认密码" prop="confirmPassword">

<el-input type="password" v-model="form.confirmPassword"></el-input>

</el-form-item>

<el-form-item>

<el-button type="primary" @click="submitForm('form')">注册</el-button>

<el-button @click="resetForm('form')">重置</el-button>

</el-form-item>

</el-form>

</div>

</template>

<script>

export default {

data() {

return {

form: {

username: '',

password: '',

confirmPassword: ''

},

rules: {

username: [{ required: true, message: '请输入用户名', trigger: 'blur' }],

password: [{ required: true, message: '请输入密码', trigger: 'blur' }],

confirmPassword: [

{ required: true, message: '请再次输入密码', trigger: 'blur' },

{ validator: this.checkPassword, trigger: 'blur' }

]

}

};

},

methods: {

checkPassword(rule, value, callback) {

if (value === '') {

callback(new Error('请再次输入密码'));

} else if (value !== this.form.password) {

callback(new Error('两次输入密码不一致!'));

} else {

callback();

}

},

submitForm(formName) {

this.$refs[formName].validate(valid => {

if (valid) {

//register logic

} else {

console.log('error submit!!');

return false;

}

});

},

resetForm(formName) {

this.$refs[formName].resetFields();

}

}

};

</script>

2. 实现路由功能

接下来,我们需要使用Vue路由来实现页面的跳转功能。在src目录下创建router.js文件,并添加下面的代码:

import Vue from 'vue';

import VueRouter from 'vue-router';

import Login from '@/components/Login';

import Register from '@/components/Register';

Vue.use(VueRouter);

export default new VueRouter({

routes: [

{ path: '/', component: Login },

{ path: '/login', component: Login },

{ path: '/register', component: Register }

]

});

在上面的代码中,我们首先引入了Vue和VueRouter,并注册了VueRouter插件。然后,我们在路由中设置了三个路径:'/'、'/login'和'/register',分别对应着首页、登录页和注册页。当页面打开时,会默认跳转到登录页。

接下来我们需要在App.vue中引入路由组件,并设置路由出口。在App.vue文件中添加下面的代码:

<template>

<div id="app">

<router-view></router-view>

</div>

</template>

<script>

export default {

name: 'App'

};

</script>

3. 实现登录和注册逻辑

3.1 登录逻辑

我们首先需要在后端构建好登录功能,使用axios发送POST请求并提交表单中的用户名和密码数据。如果登录成功,我们就需要将token存储到浏览器的localStorage中。

import axios from 'axios';

export function login(username, password) {

return axios({

method: 'post',

url: '/api/auth/login/',

data: {

username: username,

password: password

}

}).then(response => {

localStorage.setItem('token', response.data.token);

return response.data.user;

});

}

在登录成功后,我们需要将用户信息存储到Vuex中,方便当前页面和其他页面调用。

import Vuex from 'vuex';

import Vue from 'vue';

import { login } from '@/api/auth';

Vue.use(Vuex);

export default new Vuex.Store({

state: {

user: null

},

mutations: {

setUser(state, user) {

state.user = user;

}

},

actions: {

login({ commit }, { username, password }) {

return login(username, password).then(user => {

commit('setUser', user);

});

}

}

});

3.2 注册逻辑

注册和登录逻辑类似,我们也需要在后端构建好注册功能,使用axios发送POST请求并提交表单中的用户名和密码数据。

当注册成功后,我们需要使用Element-plus中的MessageBox组件来提示用户注册成功,并且自动跳转到登录页。

import axios from 'axios';

import { MessageBox } from 'element-plus';

import router from '@/router';

export function register(username, password) {

return axios({

method: 'post',

url: '/api/auth/register/',

data: {

username: username,

password: password

}

}).then(() => {

MessageBox.alert('注册成功!', '提示', {

confirmButtonText: '确定',

callback: () => {

router.push({ path: '/login' });

}

});

});

}

4. 配置拦截器和Token验证

最后,我们需要添加一个拦截器,用来在每个请求中加上token,保障请求的安全性,并且如果token失效需要跳转到登录页面。

我们在main.js文件中添加下面的代码:

import axios from 'axios';

import router from './router';

axios.defaults.baseURL = 'http://localhost:8000';

axios.interceptors.request.use(

config => {

const token = localStorage.getItem('token');

if (token) {

config.headers.Authorization = `Token ${token}`;

}

return config;

},

error => {

return Promise.reject(error);

}

);

axios.interceptors.response.use(

response => {

return response;

},

error => {

if (error.response && error.response.status === 401) {

// token失效处理

router.push({ path: '/login' });

}

return Promise.reject(error);

}

);

在上面的代码中,我们使用axios的interceptors实现了拦截器功能,如果有token,就会在请求头中加上Authorization字段,如果没有token或者token失效,就会自动跳转到登录页面。

5. 总结

通过以上的步骤,我们成功地实现了Vue和Element-plus的用户登录和注册功能。

首先我们创建了两个组件:Login和Register,分别对应着登录和注册页面。然后,通过Vue-router实现了页面的跳转功能。接下来,我们编写了登录和注册的逻辑,并且添加了拦截器和Token验证,保障了用户的安全性。

在日常的开发中,我们可以按照以上步骤来实现需要的功能,使用Element-plus组件库可以大大减轻我们的开发难度,增强用户体验。