前言#
不知道照着我上一期水文搭建 Mix-Space 的小伙伴们有没有遇到一个问题啊,就是你后端登录之后,前端还是访客状态
然后此时你是无法以你的身份在自己的网站上发表评论的,就像这样
不知道你们遇到没遇到,反正我弄过 3 次都遇到了
解决#
Shiro 主题中可以通过以下方法直接登录,Kami 我没多测试所以建议直接跳过看第二种方法
直接登录(Shiro)#
根据开发者所描述,只需要双击头上左边的头像即可登录
更新此方法的时候那台演示服务器我已经删了,所以随便找了个朋友的站演示一下
然后登录就行了
API 和 前端改为同域#
但是我们想一下这个东西是怎么鉴权的呢,啊很简单是 Cookies,但是当我们查看 Cookies 时发现前端和后端都是有 mx-token
这个 Cookie 的,并且值都一模一样
我知道无效打码,所以你们不用提醒我
这两天在开发 开往成员列表的 OAuth 的时候也发现了这个问题,也就是说登录 API 和前端如果不是同一个域名的话是没有办法跨站使用 Cookies 的
我们又知道后端的 API 目录是 /api/v2
,那么我们是不是可以把 API 和 前端 放在一个域名上呢
很显然宝塔是不允许这样做的
实际上 Nginx 配置文件是允许我们这样做的,于是我们可以编辑配置文件来实现像这样的骚操作
完整的配置文件如下,把他替换进前端站点反向代理配置文件即可(然后就可以把后端的反代给扬了)
# See: https://github.com/mx-space/docker/blob/master/configs/nginx.conf
# This is a example for nginx configure if you host mx-space manually
location ~* \.(gif|png|jpg|css|js|woff|woff2)$ {
proxy_pass http://127.0.0.1:2323;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
expires 30d;
}
location ~* \/(feed|sitemap|atom.xml) {
proxy_pass http://127.0.0.1:2333/$1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
add_header X-Cache $upstream_cache_status;
add_header Cache-Control max-age=60;
}
location / {
proxy_pass http://127.0.0.1:2323;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
add_header X-Cache $upstream_cache_status;
add_header Cache-Control no-cache;
proxy_intercept_errors on;
}
location /api {
proxy_pass http://127.0.0.1:2333;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
add_header X-Cache $upstream_cache_status;
add_header Cache-Control no-cache;
proxy_intercept_errors on;
}
location /qaqdmin {
proxy_pass http://127.0.0.1:2333;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
add_header X-Cache $upstream_cache_status;
add_header Cache-Control no-cache;
proxy_intercept_errors on;
}
location /socket.io {
proxy_http_version 1.1;
proxy_buffering off;
proxy_set_header Upgrade
$http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_pass http://127.0.0.1:2333/socket.io;
}
保存之后我们回到站点
先把 Cookies 都清理掉
刷新后直接访问 前端域名/qaqdmin
,然后登录
然后我们来到 设定 → 系统 → 网站设置,把 4 个设置项中的域名都改为前端域名
完成之后点右上角的保存,然后打开首页
已经有了亲切的欢迎提示
去评论区看看?
啥?你问我你前端在 Vercel 上咋办?
其实还是有办法的,参考 这个
此文由 Mix Space 同步更新至 xLog
原始链接为 https://blog.nekorua.com/posts/build/73.html