前言#
不知道照著我上一期水文搭建 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