前一天的優化,讓用 Google 登入的人隔天都沒了大頭貼
Futari 是給兩個人一起記生活帳的家計簿。登入之後每個人都有自己的頭像,用 Google 帳號登入的人,頭像就是 Google 上的那張照片。
5 月 26 日,我做了一件自認很正確的事:把顯示頭像的方式,換成 Next.js(Futari 網頁版用的框架)內建的圖片元件。它會把圖片縮成剛好的大小、等捲到了才載入,還會先把位置留好,畫面不會跳來跳去,教科書上都叫人這樣做。我換完、測試全過、合併、發版,開開心心關電腦。
隔天打開正式站,每一張 Google 頭像都不見了,全變成名字縮寫的小圓圈。那個圓圈本來只該出現在沒有照片的人身上。
我盯著螢幕三秒,才想起來是自己前一天埋的雷。
這個圖片元件有個平常不會想到的規矩:從別的網站來的圖片,它只處理事先登記過的網址,沒登記的一律拒絕。這是安全上的設計,免得網站被拿去幫任何人處理任何來路的圖片。我的名單上只有一個來源,就是 Futari 自己存放上傳照片的地方。
Google 登入的頭像不在那裡,是從 Google 自己的圖片網址來的。名單上沒有它,元件就直接拒絕,頭像載不出來,畫面安安靜靜退回縮寫。沒有紅字、沒有當機、沒有人收到警報,大家的臉就這樣消失了。
修法只有一行,把 Google 的圖片網址加進名單。
麻煩的是這個 bug 的長相。我在自己電腦和自動測試裡,多半用上傳到 Futari 的照片在測,它根本不在測試範圍內;它也不報錯,只是優雅地換成縮寫,監控看起來一切正常。會發現的人,只有真的用 Google 登入、然後納悶「我的照片呢」的使用者,或是隔天早上手賤打開正式站的我。降級得太優雅,有時候反而是壞事,因為壞掉看起來跟沒壞一樣。
這次讓我記住的是,在資料經過的路上插進一層「更好」的東西,不管是圖片處理、快取還是代理,那一層都會帶著自己的規矩進來。我以為只是把舊的圖片換成比較聰明的圖片,其實是在中間放了一個看名單的守門員。它不認得誰是站長,只認名單。
想看看 Futari 現在長什麼樣子的話,可以到作品集找它,用 Google 登入,看看你的頭像有沒有好好出現。
先不說了,我得去把每一個從外面來的圖片都點開看一遍,趁它們還沒當著使用者的面消失。
這段 code 寫於 2026 年 5 月 27 日,文章整理於 2026 年 10 月。