用户登录

用户提供它的用户名还有密码,请求验证身份 ... 我们收到请求以后验证用户身份,如果验证通过,就给用户签发一个 Token,这个 Token 用的是 jwt .. 在宁皓网有个专门的课程介绍了 jwt,也就是 JSON Web Token ..

先安装一个签发还有验证 jwt 的包 ... 用 npm 或者 yarn 安装 ... 名字是 jsonwebtoken ..

然后打开 userRouter ,用户路由 .. 添加一个新的路由 .. 用一下 router 的 post 方法 .. 路由地址是 /auth ..

请求用 UserController 的 auth 方法来处理 .. 打开 UserController ,添加一个 auth 方法 .. 两个参数 .. request .. 还有 response ..

下面别忘了把这个方法导出来 .. 添加一个 auth ..

再回到 auth 这个方法 ... 在它里面,可以用一下 User 模型的 findOne 方法,先在我们自己的数据库里查询一下有没有请求的用户 .. 给它设置一个条件 .. 就是 userName .. 对应的值是请求主体里的 userName ..

接着用一个 then .. 如果找到就会返回用户文档,可以使用 user 表示 ..

在里面先判断一下 ... 如果没找到用户 ... 我们就 return 一个 Promise.reject() .. 这样在下面的 catch 方法里可以处理错误 ... reject 的时候带一条信息 ... 没找到用户 ..

下面再用一个 catch .. 错误在 error 里面, 响应一个状态码,400 ,表示 Bad Request .. send 一个 error ...

回到上面的 then .. 如果成功的在数据库里找到了用户 .. 这里我们用一下 bcrypt 的 compare 方法,比较一下用户发送过来的密码,还有存储在数据库里的密码 .. 发送过来的密码是 request.body.password .. 在数据库里查询出来的密码是 user.password ..

这个 compare 也会返回 Promise ... 接着用一个 then .. 结果在 result 里面 .. 然后判断一下 ... 如果结果是 true .. 说明验证通过 .. 也就是用户提供的密码跟存储在我们数据库里的密码是匹配的 ..

这样我们就给用户签发一个 jwt .. 签发可以使用 jsonwebtoken .. 在文件的上面,先导入 jsonwebtoken ..

先添加一个 payload,它是 token 里的具体的数据 .. 里面添加一个 userName ... 对应的值就是用户名 ..

签发 token 还需要用到一个密钥 .. 添加一个 secret ...

然后定义一个 token .. 用一下 jwt 的 sign 方法,token 里的具体的数据就是上面定义的 payload ,再把密钥告诉这个方法 ..

然后再用一下 response 的 send .. 响应一下 .. 一个对象 ... 把 token 放进去 ..

如果验证没通过 ... 一个 else .. response 一个状态码 ... 401 ,表示 Unauthorized , send .. 一条信息 .. 未通过身份验证 ..

演示

下面我们再去测试一下 ... 打开 REST 客户端 .. 配置一个请求 .. 方法是 POST ... 请求的地址是 api/auth ..

请求的主体用 JSON 格式,添加一个 JSON 数据 .. 里面提供一下 userName ... 还有 password ..

发送一下这个请求 .. 提示没找到用户 ...

不过我的数据库里应该有 wanghao 这个用户 ... 回到 UserController 的 auth 方法 .. 这个 findOne 方法的查询条件我写错了 .. 应该是 userName .. Name 的首字母应该是大写的 ..

回到 REST 客户端 .. 再试一下 ..

身份验证通过,就会给我们响应回来一个 token ..

再试一下 ... 改一下这个用户名 .. 发送请求 ... 在数据库里没找到这个用户,会响应一个 400 状态码 .. 还有一条信息,提示没找到用户 ..

这次我们再改一下密码 ... 发送请求 ...

这回虽然找到了用户,但是密码不对 .. 所以会响应 401 状态 ... 表示未通过身份验证 ..

然后再都改成正确的信息 ... 发送一下这个请求 ... 这次又会给我们响应回来一个 token ..

身份验证与签发 Token《 Node.js:基于 Token 的身份验证 》

统计

15260
分钟
0
你学会了
0%
完成

社会化网络

关于

微信订阅号

扫描微信二维码关注宁皓网,每天进步一点