koa2用户注册、登录验证和Salt加密的实现方法
加密和解密
首先,介绍用户名和密码在服务器上的存储状态。我们知道,注册新用户时,当前服务器会在表单中填写用户名和密码,并通过post请求提交给服务器。然后,服务器从ctx.request.body中取出用户名和密码,并将它们存储在数据库的一个表中。这个表通常被命名为用户。
关键是服务器如何在数据库中存储用户名和密码。直接保存?不可能,太不安全了。永远不要出现所有用户名和密码一目了然的危险情况。
因此,更好的处理方法如下:服务器先用盐加密用户的密码,然后保存在数据库中。
密码认证呢?然后,接收前端输入的明文密码,并与数据库中相应的加密密码进行比较。如果正确,则登录成功。注意:如果有人得到了这个加密密码,那就没用了。因为比较对错的方法已经在服务器上写死了,我们只能比较明文密码和加密密码是否匹配。如果收到两个相同的加密密码,身份验证将不会通过。
至于明文密码和加密密码怎么比较,不用担心,加密和解密的方法是一起产生的。Bcryptjs就是这样一个很好的加密和解密工具。(因为在windows上安装bcrypt会报错,据说其他系统都可以,所以改为安装bcryptjs,它的api和用法和bcrypt完全一样)
我在js模块中定义了两种方法,一种是加密,一种是解密。在加密算法中,我们需要先生成salt。所谓盐,就是先把一些不规则的字符混入明文密码中。引入的数字越大,混合盐就越复杂。最后通过hashSync方法生成加密密码并返回。解密方法更简单,直接调用封装的compareSync方法,比较明文密码和加密密码。
用户注册
在服务器路由模块中,公开了一个注册接口,用于接收前端注册信息,用salt对密码进行加密并存储在数据库中。
const router=require(' KOA-router ')();const UserModel=require('./schema/user’);const Crypt=require('。/crypt’);const jwt=require(' jsonwebtoken ');//添加新用户router.post ('/register ',asynctx={ const user entity=new user model(CTX . request . body);user entity . password=crypt . encrypt(user entity . password);等待UserEntity.save()。然后(()={ ctx.body={ code: 200,msg : ' register success ' };}) .catch(()={ CTX . body={ code : 500,msg : ' register failed ' };});});(看看我的代码,有几点需要说明:首先,我通过usermodel的保存方法将这些数据保存在mongoDB数据库中。至于Model和schema的概念问题,这里就不赘述了;第二:存储失败的原因可能是网络问题和服务器程序错误,但最大的可能是我在userSchema中定义了用户名的不可重复性,也就是所谓的“用户名已经存在”。
为了便于解释,这里发布了userModel的定义代码:
登录检查
让我们回到服务器路由模块,看看如何完成登录检查。
//登录检查router.post ('/login ',asynctx={ const data=CTX . request . body;等待UserMoDEL . FindOne({ account : data . account })。然后(RES={ const check password=crypt . decrypt(data . password,RES . password);if(check password){ const token=jwt . sign({ account : RES . account },'张南',{ expire resi : ' 2h ' });ctx.body={ code: 200,msg: '成功登录',token : token };} else { ctx.body={ code: 500,msg: '错误密码' };} }) .catch(()={ CTX . body={ code : 501,msg: '用户不存在' };});});首先,我们根据用户输入的用户名在数据库中查找用户信息。如果找不到,则用户名不存在。这是第一层逻辑。
如果找到,调用刚才定义的解密方法,将明文密码和加密密码进行比较,如果是错误的,告诉前端密码是错误的;如果是正确的,调用jwt的sign方法向前端发出一个令牌。发布的内容是用户名;当后端前端发送请求并携带该令牌时,如果验证令牌有效,解析出的用户名就是服务器判断前端请求身份的标识,告诉服务器“我是xxx,我登录了”。这是第二层逻辑。
摘要
以上就是边肖介绍的koa2用户注册、登录验证、salt加密的实现方法。希望对大家有帮助。如果你有任何问题,请给我留言,边肖会及时回复你。非常感谢您对我们网站的支持!如果你觉得这篇文章对你有帮助,请转载,请注明出处,谢谢!
版权声明:koa2用户注册、登录验证和Salt加密的实现方法是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。

















