我现在有三个项目使用一个nginx 代理,后端全部是同一个redis。这时候怎么实现登录其中一个另外两个vue项目访问时不用重新登录,token 已经报错到了cookie 中
时间: 2024-12-17 09:46:04 浏览: 8
当你有多个前端项目通过同一个Nginx代理访问后端服务,并且所有项目都需要共享同一个Redis的会话管理(例如JWT token),你可以按照以下步骤配置:
1. **Nginx配置**:
- 设置统一的Cookie名称:在Nginx的`http`块或者每个项目的location块中设置相同的Cookie名字,例如`SESSION_ID`,这使得所有的项目都能识别并获取同一份登录状态。
- 使用`proxy_cookie`指令将后端返回的认证cookie传递给前端,这样每次请求都会携带已有的session ID。
```nginx
server {
location /project1/ {
proxy_pass http://backend/;
proxy_set_header Cookie $http_COOKIE;
}
location /project2/ {
proxy_pass http://backend/;
proxy_set_header Cookie $http_COOKIE;
}
# ... 其他项目配置类似
}
```
2. **后端处理**:
- 后端需要在每次响应头中添加Set-Cookie,将JWT或其他token写入到`SESSION_ID`名下的cookie。
- 当检测到登录失败(token过期或无效)时,更新token并设置新的有效期,同时刷新前端的`SESSION_ID` cookie。
3. **前端实现**:
- 在Vue项目中,你需要监听`SESSION_ID` cookie的变化,并在接收到新的token时更新存储的token值和过期时间。这通常是通过JavaScript的事件监听和fetch请求头中的`Authorization`字段来实现的。
重要的是,前端在发起新的请求时需要带上之前的`SESSION_ID`,这样后端才能识别用户的登录状态。
阅读全文