Node.js使用Session认证及Token认证

783 阅读2分钟

1、session认证原理

session是服务端存储的一个对象,主要用于存储所有访问过该服务端的客户端的用户信息。当用户首次采用用户名和密码访问服务器时,服务器会验证用户信息,验证成功后在服务器端写入session数据,并向客户端返回sessionid,客户端将sessionid保存在cookie中,当用户再次访问服务器时,会携带sessionid,服务器会拿着sessionid从服务器获取session数据,然后进行用户信息查询,成功后就会将查询到的用户信息返回,从而实现状态保持。 session认证.png 代码实现: (1)导入并配置express-session image.png (2)撰写登录接口:判断用户信息是否正确,req.session的属性可获取用户登录状态。 image.png (3)获取用户信息接口:登陆后,通过req.session判断是否登录,正确后才可以返回用户信息。 image.png (4)退出登录接口:清空session信息 image.png

2、token认证原理

前言:由于Session认证机制需要配合Cookie才能实现。由于Cookie默认不支持跨域访问,所以,当涉及到前端跨域请求后端接口的时候,需要做很多额外的配置,才能实现跨域Session认证。 (当前端请求后端接口不存在跨域问题的时候,推荐使用 Session 身份认证机制。当前端需要跨域请求后端接口的时候,不推荐使用 Session 身份认证机制,推荐使用 JWT 认证机制。)

首先客户端使用用户名和密码请求登录,服务端进行验证,当验证通过后,会对当前用户数据进行加密,生成一个加密字符串token,返回给客户端(服务器并不保存)。客户端收到token后把它存储起来,可以放在cookie或者Local Storage(本地内存)里。接下来客户端以后每次向服务端发送请求的时候都需要带上该token。服务端收到请求时验证Token,如果验证通过,则允许用户访问相应资源。 JWT认证机制.png 代码实现: (1)导入jsonwebtoken与express-jwt,分别用于加密与解密token。 image.png (2)定义全局解密中间件。 image.png (3)撰写登录接口:判断用户信息是否正确,正确后加密生成token。 image.png (4)获取用户信息接口:由于设置了全局解析token的中间件,可通过req.auth方式获取用户信息。 image.png (5)定义全局错误处理中间件,可捕获因解析token失败后导致的错误。 image.png