技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-5.用户登录,密码的bcrypt(hash)加密与验证

技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-1.工具和本地环境
技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-2.启动项目
技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-3.路由、模型与数据库操作
技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-4.跨域且传输数据,并优化后端接口
技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-5.用户登录,密码的加密与验证
技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-6.用户登录(二),token验证
技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-7.分类的模型关联和通用CRUD接口
技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-8.使用mavoneditor(vue的markdown编辑器),并批量上传图片

1.用户登录

Login.vue:

<template><div class="login-container"><!-- 使用elementui中的card组件 --><el-card header="管理员登录" class="login-card"><!-- 监听表单的submit事件,native.prevent监听原生表单事件跳转接口并且阻止页面跳转 --><el-form @submit.native.prevent="login"><el-form-item label="用户名"><el-input v-model="model.username"></el-input></el-form-item><el-form-item label="密码"><el-input v-model="model.password" type="password"></el-input></el-form-item><el-form-item><el-button type="primary" native-type="submit">登录</el-button></el-form-item></el-form></el-card></div>
</template><script>
export default {data() {return {model: {username: "",password: ""}}},methods: {async login() {const res = await this.$http.post('login', this.model)console.log(res)// 存储token值// sessionStorage是页面缓存存储,关闭页面后token值被清除,每次进入页面都需要进行账号登陆// localStorage是本地存储,关闭页面后token值不会被清除,只要不清理浏览器缓存就无需再次进行登录操作localStorage.token = res.data.token// 登录成功跳转到网站首页this.$router.push('/')// 使用vue效果在页面展示结果this.$message({type: 'success',message: '登陆成功'})}}
}
</script><style>
.login-card{width: 35rem;margin: 6rem auto;
}
</style>

引入Login.vue:

页面:

后端接口:
(1)新建登录控制器

(2)引入路由

(3)编辑登录接口函数

 public function index(){// 获取前端传值$data = request() -> param();// dump($data['username']);// 验证是否输入用户名if($data['username'] == ""){return json(['message' => '请输入用户名'], $httpCode = 422);}// 在数据库查找用户$user = Admin::where('username', $data['username'])->find();if($user){// 如果有该用户// 验证是否输入密码if($data['password'] == ""){return json(['message' => '请输入密码'], $httpCode = 422);}// 验证密码是否正确if($data['password'] === $user['password']){return json(['message' => '验证成功'], $httpCode = 200);}else{return json(['message' => '密码错误'], $httpCode = 422);}}else{// 如果没有该用户return json(['message' => '没有该用户'], $httpCode = 422);}}

(4)前端全局监听响应的拦截,将错误时发送的message在页面显示

// 全局进行响应的拦截(axios内的响应拦截方法)
http.interceptors.response.use(res => {return res
},err => {// 如果拦截到错误的操作,使用VUE将错误信息进行弹出展示// 获取错误信息console.log(err.response.data.message)Vue.prototype.$message({type: 'error',message: err.response.data.message})return Promise.reject(err)
})


测试:





到此登录功能实现。

2.密码jwt加密

(1)为什么给密码加密?
虽然密码输入的type为password,但是我们仍可看到用户的密码:

作为一名合格程序员,不光要保护用户数据安全,还要保证用户的隐私安全。用户密码同样涉及到用户隐私,很多人为了更容易记住密码,会在多个平台使用相同的密码进行用户注册和登录。
(2)为什么使用bcrypt加密?
传统加密方法最常用的为md5加密,但是md5加密是以特定算法对字符串密码进行格式化加密的操作,说直白一点,是可以根据规律进行反向解密的。
而bcrypt加密方法很好地解决了这个问题,相同的密码加密出的字符串各不相同,无法反向解密,只可进行比对验证。
(3)使用bcrypt加密
在php5.5.0之后版本中,php内部封装了bcrypt加密和解密方法,无需像go\node等后端语言一样需要下载bcrypt包进行密码的加密解密操作。
同时,php的password_hash()方法省略了salt加盐过程,每次密码的散列生成时会自动生成随机的盐值,无需我们自己设置。
一般我们使用PASSWORD_DEFAULT 算法进行密码的加密,更多详细信息大家可以去php手册https://www.runoob.com/php/php-password_hash.html了解。
修改之前的接口:
添加管理员

修改管理员信息

测试:

此时,密码加密成功。

3.bcrypt密码验证

所谓密码验证,就是指在登录时输入用户设置的密码如123456,将123456通过bcrypt特殊方法与之前加密的值做比对的过程。
同样的,php封装好了bcrypt方法password_verify($password, $hash)
修改登录接口:

测试:


密码的验证成功。

到此,用户登录和密码隐私安全问题已解决。
下篇文章完善登录功能,加入登陆的token验证。

更多设计、功能的学习经验,大家也可以去我的公众号查看!

————

技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-5.用户登录,密码的bcrypt(hash)加密与验证相关推荐

  1. 技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-6.用户登录(二),token验证

    技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-6.用户登录(二),token验证 技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-1.工具和本 ...

  2. 技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-2.启动项目

    技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-2.启动项目 技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-1.工具和本地环境 技能学习:学习 ...

  3. 技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-3.路由、模型与数据库操作

    技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-3.路由.模型与数据库操作 技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-1.工具和本地环境 ...

  4. 技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-8.使用mavoneditor(vue的markdown编辑器),并批量上传图片

    技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-8.使用mavoneditor(vue的markdown编辑器),并批量上传图片 技能学习:学习使用php(tp6框架) + ...

  5. 技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-4.跨域且传输数据,并优化后端接口

    技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-4.优化后端接口,前端使用axios实现接口功能 技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站 ...

  6. 技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-7.分类的模型关联和通用CRUD接口

    技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-7.分类的模型关联和通用CRUD接口 技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-1.工具和 ...

  7. 技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-1.工具和本地环境

    技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-1.工具和本地环境 技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-1.工具和本地环境 技能学习 ...

  8. 两个读书笔记:springboot+vue.js分布式组件全栈开发训练营 + 大数据开发基础

    (springboot+vue.js分布式组件全栈开发训练营原文在notion中, 大数据开发在思维导图中, 这个博客只是保存, 无法阅读. ) what is different between s ...

  9. mpvue 微信小程序_使用Vue.js开发微信小程序:开源框架mpvue解析

    戳蓝字"CSDN云计算"关注我们哦! 作者 | 成全 责编 | 阿秃 转自 | 美团技术团队企业博客 前言 mpvue是一款使用Vue.js开发微信小程序的前端框架.使用此框架,开 ...

最新文章

  1. 思科路由器交换机模拟软件_eNSP模拟器上学习华为三层交换机与路由器对接
  2. mysql SQLyog导入导出csv文件
  3. 创建data_微软推出 Microsoft.Data.SqlClient,替代 System.Data.SqlClient
  4. 基于Boost::beast模块的协程WebSocket 服务器
  5. 02_tensorflow2环境安装、CUDA 10.1 和CUDnn 7.6.5 版本安装、https://tensorflow.google.cn/overview中概述翻译
  6. JSP语法(JSP动作)
  7. php 安全基础 第八章 共享主机 安全模式
  8. IOC 容器中那些鲜为人知的细节(关于 autowiring)
  9. 编译原理:有穷自动机(DFA与NFA)
  10. 联想笔记本声音太小怎么办_图文详解笔记本电脑声音太小解决方法
  11. 人工神经网络matlab啊6,基于MATLAB6.x的BP人工神经网络的土壤环境质量评价方法研究...
  12. 面对互联网寒冬,程序员能够做什么?
  13. 完美数——C++代码及思路分析 leetcode507
  14. python用户名和密码登录_Python爬虫:账号密码登入扇贝
  15. 如何在新的Apple TV遥控器上调整触摸灵敏度
  16. 联想小新笔记本,16G运行内存只能使用13.9G或14.9G的解决方案
  17. iOS-xcode模拟器录屏
  18. [ZJOI2004]沼泽鳄鱼
  19. html预览pdf上的电子印章,移动端在线预览pdf显示签名签章pdf显示多页
  20. AMiner权威发布区块链大数据报告(附下载)

热门文章

  1. 内部RAID 0:OCZ将推廉价高速固态硬盘
  2. 最大公共子串-蓝桥杯真题 动态规划(c++实现)
  3. docker-compose使用
  4. 字符串和数组的相互转换
  5. guid linux 识别的分区表_磁盘管理—MBR分区与GPT分区总结
  6. java observer update_Java_观察者模式(Observable和Observer) -转
  7. https页面内http链接跳转时的referer问题
  8. 让程序员增添一些浪漫情怀的代码
  9. 神经网络-入门3-术语
  10. 想不想修真获取服务器配置文件,想不想修真 全地图属性要求都在这了,各位玩家请注意收藏!...