Authentication
Auth memakai Better Auth yang di-host oleh apps/api. @repo/auth adalah kontrak global untuk semua aplikasi. @contracts/* hanya dipakai bila ada kontrak khusus antar microfrontend apps/app/*.
Boundary
- Auth handler mengelola sign-up, sign-in, sign-out, verification, password, passkey, two-factor, dan session.
- Domain route di
apps/apimemanggilrequireCurrentUsersetelah request identity berhasil dipetakan dari cookie Better Auth. - Proxy header hanya diterima bila secret trusted cocok dan hanya dari server-to-server.
- Aplikasi web memakai
createAoriAuthClientdari@repo/auth/client. - Next.js server runtime memakai
getAoriSessionFromHeadersdari@repo/auth/server.
import { createAoriAuthClient } from '@repo/auth/client';
export const authClient = createAoriAuthClient({
env: {
NODE_ENV: process.env.NODE_ENV,
NEXT_PUBLIC_API_URL: process.env.NEXT_PUBLIC_API_URL,
NEXT_PUBLIC_AUTH_SAME_ORIGIN: process.env.NEXT_PUBLIC_AUTH_SAME_ORIGIN
}
});Cookie sharing
Production dengan subdomain bersama harus memakai:
BETTER_AUTH_URL=https://api.example.com
BETTER_AUTH_SECRET=...
AUTH_COOKIE_DOMAIN=example.com
CORS_ALLOWED_ORIGINS=https://app.example.com,https://landing.example.com,https://commerce.example.com
BETTER_AUTH_TRUSTED_ORIGINS=https://app.example.com,https://landing.example.com,https://commerce.example.com
NEXT_PUBLIC_AUTH_SAME_ORIGIN=trueSetiap aplikasi Next.js menambahkan rewrite /api/auth/:path* ke BETTER_AUTH_URL/NEXT_PUBLIC_API_URL. Ini membuat browser memanggil auth lewat origin aplikasi, tetapi handler tetap milik apps/api.
Authorization: Bearer <access-token>
x-aori-user-id: <user-id>
x-aori-proxy-secret: <server-only-secret>Jangan kirim proxy secret ke browser, Expo, logs, atau error response. Jangan menerima userId dari body sebagai identitas caller.
Failure handling
-
401berarti session hilang/kedaluwarsa: refresh bila aman, jika gagal arahkan ke sign-in. -
403berarti session valid tetapi tidak memiliki akses organisasi. Semua mutasi mengulang ownership check di server.
Temukan lebih banyak mengenai status code.