Identity verification
Turn the identity check on once your signed identify() calls verify, and read the chart that shows how each session's claim fared.
Autopilot > Identity verification shows whether the user ids your pages claim through
identify() arrive with a valid signature, and lets an admin make that signature required.
It reads the environment selected in the sidebar.
Before you start
- Signing happens on your server with the environment's Secret. The recipe is in the Quickstart.
- Only a Workspace Admin can change Require identity verification. Everyone can read the chart.
Setting it up
- Add the signature to your
identify()calls, following Sign the users you identify on the page. Hand it to a coding agent copies the whole task, written for the agent you pick: where the Secret is read, how the hash is made, how it reachesidentify(). - Deploy, then watch Identity checks. Each bar is one hour of sessions that tried to identify, split by outcome.
- When the bars are Verified and Unverified has gone to zero, turn on Require identity verification.
What it changes
Off, ARCY checks every signature, records the outcome in the chart, and turns nobody away.
On, a session whose claim does not verify is served as anonymous. The whole identify()
call is dropped: the user id and every attribute sent with it, including name, email and
plan. No profile is created or updated. The call still succeeds from the browser's point of
view, so the widget can greet the user by the name it was handed while ARCY stores nothing.
The chart splits sessions into Verified, Verified (previous secret), Unverified and Refused. What each outcome means for one session is explained on Users, where the same outcome is shown per session.
When it goes wrong
Unverified rises after you turned the check on. Users are arriving as anonymous. Open the
browser console on an affected page: the widget warns on every call that is missing
userHash. Fix the signature before anything else.
Refused rises after you replaced the Secret. A server is still signing with the old Secret. Deploy the new one. Replacing happens on Environments, not here.
Everything is Unverified although your code signs. Sign the exact string you pass to
identify(). String(user.id) and user.id are different inputs.