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


載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。