banner
libxcnya.so

libxcnya.so

Nothing...
telegram
twitter
github
email

完美解决 Mix-Space 前端鉴权失败 / 评论不认主人的问题

前言#

不知道照着我上一期水文搭建 Mix-Space 的小伙伴们有没有遇到一个问题啊,就是你后端登录之后,前端还是访客状态
然后此时你是无法以你的身份在自己的网站上发表评论的,就像这样

1

不知道你们遇到没遇到,反正我弄过 3 次都遇到了

解决#

Shiro 主题中可以通过以下方法直接登录,Kami 我没多测试所以建议直接跳过看第二种方法

直接登录(Shiro)#

根据开发者所描述,只需要双击头上左边的头像即可登录

15

更新此方法的时候那台演示服务器我已经删了,所以随便找了个朋友的站演示一下

13

14

然后登录就行了

API 和 前端改为同域#

但是我们想一下这个东西是怎么鉴权的呢,啊很简单是 Cookies,但是当我们查看 Cookies 时发现前端和后端都是有 mx-token 这个 Cookie 的,并且值都一模一样

2

3

我知道无效打码,所以你们不用提醒我
这两天在开发 开往成员列表的 OAuth 的时候也发现了这个问题,也就是说登录 API 和前端如果不是同一个域名的话是没有办法跨站使用 Cookies 的
我们又知道后端的 API 目录是 /api/v2,那么我们是不是可以把 API 和 前端 放在一个域名上呢

很显然宝塔是不允许这样做的

4

实际上 Nginx 配置文件是允许我们这样做的,于是我们可以编辑配置文件来实现像这样的骚操作

5

完整的配置文件如下,把他替换进前端站点反向代理配置文件即可(然后就可以把后端的反代给扬了)

# 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 都清理掉

6

刷新后直接访问 前端域名/qaqdmin,然后登录

7

8

然后我们来到 设定 → 系统 → 网站设置,把 4 个设置项中的域名都改为前端域名

9

完成之后点右上角的保存,然后打开首页
已经有了亲切的欢迎提示

10

去评论区看看?

11

啥?你问我你前端在 Vercel 上咋办?

12

其实还是有办法的,参考 这个

此文由 Mix Space 同步更新至 xLog
原始链接为 https://blog.nekorua.com/posts/build/73.html


加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。