- 一、什么是 Serverless
- 二、编写你的第一个 Serverless 应用
- 三、Serverless 应用是怎么运行的
- 四、如何提高应用开发调试和部署效率
- 五、serverless 应用
- 阿里云函数计算
- 腾讯云函数
- 使用 vercel 部署你的应用-推荐
- 六、场景案例
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
1.5 验证用户身份
前面提到,登录成功后,客户端需要将 token 保存下来,然后在接下来的请求中,都需要带上 token。通常会将 token 放在 HTTP 请求头中,格式通常为:
Authorization: Bearer token
这时假设我们要实现一个新的接口,获取当前登录用户信息,该接口也只能登录后才能使用。那么代码实现就是下面这样:
// 定义 /user 路由,获取当前登录的用户信息 app.get('/user', (req, res) => { // 从 HTTP 请求头中获取 token 信息 const token = req .headers .authorization .split(' ') .pop(); try { // 验证 token 并解析出用户信息 const user = jwt.verify(token, SECRET); return res.json({ success: true, data: user }) } catch (error) { return res.json({ success: false, data: '身份认证失败' }) } });
首先我们定义了 /user 路由,然后通过请求头拿到 token 信息,最后使用 jwt.verify()
对 token 进行解密,并从中得到用户信息,如果用户传入的 token 无法解析,则说明用户身份异常。
同样,我们可以将代码部署到函数计算并进行测试:
curl https://1457216987974698.cn-shanghai.fc.aliyuncs.com/2016-08-15/proxy/serverless/auth-app/user \ -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiamFjayIsImFnZSI6IjE4IiwicGFzc3dvcmQiOiIqKioqKioiLCJpYXQiOjE2MTA5MDY5MTJ9.qzNZarWbpDUA8-SO6nLd4ffEUR1IVOWKGXiocHV7MkU" {"success":true,"data":{"name":"jack","age":"18","password":"******","iat":1610905944}} # 使用错误的 token 进行身份认证 $ curl https://1457216987974698.cn-shanghai.fc.aliyuncs.com/2016-08-15/proxy/serverless/auth-app/user -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiamFjayIsImFnZSI6IjE4IiwicGFzc3dvcmQiOiIqKioqKioiLCJpYXQiOjE2MTA5MDY5MTJ9.qzNZarWbpDUA8-SO6nLd4ffEUR1IVOWKGXiocHV7Mk" {"success":false,"data":"身份认证失败"}
到此为止,一个 Serverless 架构的登录注册功能就完成了,我们也基于 JWT 实现了 Serverless 中的身份认证。
强调这样几点:
- Cookie-Session 的身份认证方式,是在服务端存储 Session 信息,客户端(浏览器)通过 cookie 存储 Session ID;
- JWT 的身份认证方式,是在服务端根据用户信息生成 token,客户端保存 token;
- Cookie-Session 的认证方案通常是有状态的,对于分布式、无状态的应用,需要将 Session 保存在共享存储中;
- JWT 的认证方式通常是无状态的,所以比较适合 Serverless 应用。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论