express开发服务端-----登录校验之拦截器的使用
参考文章: Node Express拦截器.
在express框架的使用中,添加拦截器有两种方法,一种是加在每一个api方法之前,也就是中间件,另一种是加在所有api方法的前面去写,第一种方法更适合个性化拦截,就是那种比较有针对性的,如果要是全局拦截的话,显然第二种更为适合:
要实现第二种也有两种方式:
1.使用use
//
const app = require('express')();
app.use((req, res, next) => {
//访问接口前需要验证的部分,比如token校验
})
2.使用all
//
const app = require('express')();
app.all('/*', (req, res, next) => {
//访问接口前需要验证的部分,比如token校验
})
这里拦截的部分可以自由发挥,有时候拦截的部分也可以给req赋值,方便后面的接口使用,比如拦截器里面做一些token的校验,经过一番处理,我们解密了token的数据,这时候我们就可以将解密出来的user数据赋值给req.user,后面的接口如果要使用user的数据那就很方便.
解密token,并且给req赋值
const token = (req.headers.authorization || " ").split(" ").pop();
assert(token, 401, "token不存在,请先登录");
const { id } = jwt.verify(token, process.env.SECRET_KEY);
assert(id, 401, "请先登录");
require("../models/user").findById(id, (error, data) => {
//将返回的user信息保存到req,方便后面接口调用
req.user = data;
assert(req.user, 401, "请先登录");
next();
});
今日跟同事请教一下登录校验模式方面的问题,到底是用JWT好还是SESSION好呢?被告知个有千秋,得到结论:
1.SESSION模式: 在服务器端生成,被记录在服务器端,客户端自动生成,以后客服端请求都会有一个对应的COOKIE,服务器端一直保存,所有的一切都是服务器端掌控,用户退出系统需要调用退出接口,注销SESSION.
2.JWT模式: 用户登录成功,记录当前id, 按照密钥(一直保存在服务器端)和过期时间加密生成token串,随着接口返回给客户端,此后客户端就一直保存着这个token,好处是不占用服务器端地方,而且还有一点,就是每次当访问服务器端接口前,都有一个校验token的地方,这个校验的地方可发挥的地方就很多啦,比如说监测当前请求是哪里来的ip地址,如果和上一次请求的ip地址不一致,那可能就有账号被盗的风险了,我们就可以根据情况告知客户端,还有其他一些值得发挥的,暂时没想到,等待挖掘…
总结: 个人觉着JWT更适合一点,扩展性更好,发挥的余地也更大一些.
本文介绍了在Express框架中使用拦截器进行登录校验的方法,包括全局拦截的两种方式——`use`和`all`。通过拦截器可以进行token校验,并将解密后的用户数据赋值给`req.user`。同时,讨论了JWT与SESSION两种登录校验模式的优缺点,认为JWT具有更好的扩展性和应用潜力。
2667

被折叠的 条评论
为什么被折叠?



