马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
在项目标前端部门,我们计划了一个现代化且安全的用户登录页面,采用了 Vue 3 和 Element Plus 构建,提供了简洁、直观的用户体验。登录界面包罗了用户名、密码、验证码等字段,并通过异步请求与后端交互,验证用户身份。除了传统的登录方式,我们还集成了 SSE 消息推送,实现了登录成功后的即时通知。
1. 用户登录表单
登录表单采用了 Element Plus 的 el-form 组件,共同表单验证功能,确保用户输入的合法性。表单字段包罗:
- 用户名:用户输入的用户名,必填项。
- 密码:用户密码,必填项。
- 验证码:用于增强登录的安全性,防止恶意登录。
- <el-form :model="loginForm" :rules="loginRules" ref="loginFormRef">
- <el-form-item prop="userName">
- <el-input
- v-model="loginForm.userName"
- placeholder="用户名"
- :prefix-icon="User"
- />
- </el-form-item>
- <el-form-item prop="password">
- <el-input
- v-model="loginForm.password"
- type="password"
- placeholder="密码"
- :prefix-icon="Lock"
- @keyup.enter="handleLogin"
- />
- </el-form-item>
-
- <el-form-item prop="captcha" class="captcha-item">
- <div class="captcha-input-wrapper">
- <el-input
- v-model="loginForm.captcha"
- placeholder="请输入验证码"
- :prefix-icon="Key"
- @keyup.enter="handleLogin"
- />
- <div
- class="captcha-box"
- @click="refreshCaptcha"
- ref="captchaRef"
- >
- {{ captchaText }}
- </div>
- </div>
- </el-form-item>
- </el-form>
复制代码 2. 验证码生成与样式应用
验证码生成是通过异步请求获取的,每次登录时都会生成新的验证码,增强系统的安全性。验证码采用了随机字符和干扰线的方式,增加识别难度,从而防止机器主动破解。
- const getCaptcha = async () => {
- try {
- sessionKey.value = generateUUID()
- const res = await request.get('/api/user-service/captcha', {
- params: { sessionKey: sessionKey.value }
- })
- if (res.success && res.code === '0') {
- captchaText.value = res.data
- await nextTick(() => {
- if (captchaRef.value) {
- applyRandomStyle()
- }
- })
- }
- } catch (error) {
- console.error('获取验证码失败:', error)
- }
- }
复制代码 样式方面,验证码的每个字符都应用了随机颜色和旋转角度,且配景利用了动态生成的干扰线,使验证码看起来更加复杂。
3. 登录处置处罚与加密
用户输入的密码会进行加密处置处罚,以确保其安全性。我们利用了 RSA 解密和加密算法,并将加密后的密码传递给后端。登录请求通过 userStore.login 发送,登录成功后用户会被跳转到主页面。
- const handleLogin = async () => {
- if (!loginFormRef.value) return
-
- await loginFormRef.value.validate(async (valid) => {
- if (valid) {
- loading.value = true
- try {
- const encryptedPassword = encrypt(loginForm.password)
-
- const res = await userStore.login({
- ...loginForm,
- password: encryptedPassword,
- sessionKey: sessionKey.value
- })
-
- if (res.code === '0' && res.data) {
- ElMessage.success('登录成功')
- await nextTick()
- router.replace('/')
- onUnmounted(() => {
- if (sseClient.isConnected()) {
- sseClient.close()
- }
- })
- window.addEventListener('sse-message', handleSSEMessage)
- } else {
- ElMessage.error(res.message || '登录失败')
- refreshCaptcha()
- }
- } catch (error) {
- ElMessage.error(error.message || '登录失败')
- refreshCaptcha()
- } finally {
- loading.value = false
- }
- }
- })
- }
复制代码 4. 异步消息推送(SSE)
为了提拔用户体验,登录成功后我们利用 SSE (Server-Sent Events) 技术实现了实时消息推送功能。当用户成功登录时,系统会推送一条接待消息,告知用户登录成功。
- const handleSSEMessage = (event) => {
- const message = event.detail
- console.log('收到消息:', message)
- ElNotification({
- title: '新消息',
- message: message.content,
- type: 'info'
- })
- }
复制代码 5. 请求工具与拦截器
我们封装了请求工具类 request,利用 Axios 处置处罚后端 API 请求。请求拦截器主动附加用户的 Authorization Token,相应拦截器处置处罚后端返回的结果并进行相应的错误提示。
- const request = axios.create({
- timeout: 10000,
- headers: {
- 'Content-Type': 'application/json'
- }
- })
- request.interceptors.request.use(
- config => {
- const token = localStorage.getItem('accessToken')
- if (token) {
- config.headers['Authorization'] = token
- }
- return config
- },
- error => {
- return Promise.reject(error)
- }
- )
- request.interceptors.response.use(
- response => {
- const res = response.data
- if (res.success === true && res.code === '0') {
- return res
- } else {
- ElMessage.error(res.message || '请求失败')
- return Promise.reject(new Error(res.message || '请求失败'))
- }
- },
- error => {
- if (error.response?.status === 401) {
- localStorage.removeItem('accessToken')
- localStorage.removeItem('userInfo')
- router.push('/login')
- ElMessage.error('登录已过期,请重新登录')
- } else {
- ElMessage.error(error.message || '请求失败')
- }
- return Promise.reject(error)
- }
- )
复制代码 总结
通过 Vue 3 和 Element Plus 构建的登录页面,不但简洁易用,还实现了多种安全验证手段,如密码加密、验证码和 SSE 实时消息推送等。整个登录流程与后端紧密联合,确保了用户数据的安全性,同时优化了用户体验。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |