Websocket
In modern web applications, WebSocket has become a popular technology for real-time communication. It enables data exchange between clients and servers over a single TCP connection. It is part of HTML5 and is widely supported by modern web browsers, including Chrome, Firefox, Safari, and Edge.
WebSocket connection failure is a common issue in web development.
https://apidog.com/blog/websocket-connection-failed
Ville bare resolve en feil som kommer i browser Console ved navigering som treffer nginx. Viser seg at nginx-configs må tilpasses med følgende direktiver for å slippe til Websocket connection:
location / {
...
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_http_version 1.1;
}
Fetching av tenant data
ChatGPT hadde ikke godt svar her, og post på Payload-discord er ikke besvart:
I’m making a PoC with Payload as multi-tenant CMS for some Next frontends. My query for tenant-specific data returns an empty list, and so I’d just like to check that my thinking and setup is correct.
I’m on localhost with my Payload backend (clone of multi-tenant example) and two Next frontends running on each their own port:
- – The collection I’m querying is set up with a
tenantfield. I can logon as tenant admin and see other tenants’ data filtered out.- – My tenants are set up with a
slugfield, and theirdomainsfield is set up with a test domain that is mocked in Windows hosts file. I’m querying the data like so:http://tenant-mock.localhost/cms/api/courses?where[tenant][slug][equals]=tenant-slug- – I have Payload config set up with
routes { api: "/cms/api" }to let the Next apps use that route. Then I have nginx configured for each host domain to redirect/to the Next frontend and/adminand/cmsto my Payload backend.
Hjalp ikke å sette access: { read: () => true } på collection heller; det sto tenants der før som ville ført til tom liste i seg selv.
Hjalp ikke å fikse Websocket-feilen, forventet ikke egentlig at den spilte inn.
Hjalp ikke å sette cors: [ "*" ] i Payload config.
Sitter med denne på andre dagen og føler at det er en dum feil.
EDIT: La til depth=2 i querystringen og da får jeg data. Men får alt, ikke bare tilhørende tenanten (som også står i querystringen). Er rart for jeg trodde nettopp depth gjorde det mulig å nå tenant-feltet.
EDIT 2: Løsningen var å autorisere requesten til å representere en tenant-admin, da blir andre tenants filtert bort automagisk.
Det er to måter å gjøre det på: Autorisering som user, og autorisering med API-nøkkel tilknyttet en user. Det var mulig å sette config auth: { useAPIKey: true } på User-collection, i adminpanelet ble det da mulig å hake av for om API-nøkkel skal brukes for hver enkelt bruker. Da kan man opprette API-nøkkel på alle tenant-admins, og la hver frontend querye backenden som om de var tenant-admins, med API-nøkkelen.
Å gjøre access: read tilgjengelig overalt førte bare til at alle tenants’ data ble returnert. Uten autorisering klarte ikke Payload å skille mellom tenant-data, antagelig fordi den bruker tilgangskontrollen til å skille mellom dataene.
Filteret med queryparams fikk jeg aldri til å fungere, verken med REST eller graphQL.
depth hadde ikke noe å si til slutt; straks queryen funket kunne jeg fjerne dette parameteret.
