登入位置紀錄

在成功登入後經同意取得一次位置,經網站後端傳送,並處理拒絕、逾時及重送。

登入位置紀錄

此功能記錄登入當下的位置,與 App 背景定位分開。它不新增計費、不產生 App 失聯警報、不要求每次拍臉,也不阻擋會員登入或遊戲。位置及精度來自瀏覽器,只作風險參考,不能單憑座標認定本人。

網站責任

原始碼交付的 examples/hosted-js/login-location.mjs 提供可重用的明示同意後拍點與同源提交 helper;搭配的 README 示範手動重試與本站 CSRF。請將範例納入網站自己的資產建置,不把後端 secret 或會員識別交給 helper。

每次成功建立新的登入 session,由網站後端產生 login_event_id,頁面載入後非同步顯示用途並請求定位。刷新、既有 session 恢復、狀態輪詢與驗證回呼都不是新登入。

瀏覽器建議參數為 maximumAge: 0、timeout: 10000、enableHighAccuracy: true。拒絕權限時不反覆彈窗,提供手動重試指引。每次明確嘗試產生新的 attempt_id;相同嘗試重送保留 ID。

瀏覽器只傳到網站同源後端。後端從目前 session 取得會員,不相信 JS 傳入的 Merchant、環境、user ID 或 Client secret,再以 Server API 傳送。

傳送範例

{
  "external_user_ref": "example-member-123",
  "login_event_id": "server-generated-login-id",
  "attempt_id": "attempt-id",
  "location_status": "success",
  "consent_version": "login-location-v1",
  "observed_at": "2026-10-04T02:00:00+08:00",
  "coordinates": {
    "latitude": 25.033,
    "longitude": 121.5654,
    "accuracy_meters": 50
  }
}

後端以 Basic 認證與 Idempotency-Key 呼叫 POST /api/partner/v1/login-locations。success 必須有座標及精度,其餘結果禁止夾帶座標。

location_status意義
success瀏覽器取得位置,含精度
denied未同意或瀏覽器拒絕授權
timeout取得位置逾時
unavailable裝置或定位服務暫時無法提供
unsupported瀏覽器不支援介面
not_received未執行 JS、關頁或尚未回報;不能假造已取得位置

除 not_received 以外,consent_version 與 observed_at 必填。伺服器另外保存 received_at。未完成 KYC 也可記錄,無須建立假的平台帳號。

留存與重送

eKYC 以伺服器接收時間保存新座標 31 天,之後清除座標,保留不含座標的事件摘要。網址、一般日誌及 webhook 都不得包含座標。

網站可使用短期 outbox 非同步補送;成功後清除暫存座標,失敗最多保留 24 小時。重送沿用相同嘗試 ID、Idempotency-Key 與內容;新位置或手動重試是新嘗試,不覆寫原觀測。定位傳輸失敗不影響原登入成功。