Skip to main content
Non-wallet auth methods carry over, but each becomes an explicit call (or pair of calls) instead of a context that manages the flow for you. This page maps each React SDK API to its JavaScript SDK equivalent and links to the full implementation guide for each.

Email & SMS OTP

The React SDK’s useConnectWithOtp bundled sending and verifying. In the JavaScript SDK these are two explicit steps: send the code, then verify it. Sending returns an otpVerification handle that you pass to verifyOTP.
For the full two-step UI (resend, error handling, SMS variant), see Email & SMS OTP sign-in.

Social sign-in & OAuth redirect

This is the change most likely to break a migration. In the React SDK, OAuth redirect detection was automatic — the SDK inspected the URL on mount and completed sign-in for you. In the JavaScript SDK, you must complete the redirect yourself on every app load, or returning users never finish signing in.
Start sign-in with signInWithSocialRedirect, then on the page the provider returns to, detect and complete the callback.
For sign-in buttons and the complete redirect handler, see Social sign-in & OAuth redirect handling.

Passkeys

Passkey sign-in keeps the same hook name. Registration is a separate explicit call.
registerPasskey() requests a Credentiallink elevated access token the same way registerTotpMfaDevice() does (see Registering or removing a device needs an elevated token) — expect it to need a checkStepUpAuth({ scope: TokenScope.Credentiallink }) check beforehand if the user doesn’t already hold one.
For sign-in and registration UI, see Passkey sign-in & registration.

External JWT

If you authenticate the user elsewhere and hand Dynamic a JWT, the hook is renamed but the shape is the same.
This flow is essentially headless — you already authenticated the user, so there’s no dedicated Building UI page.

Social account linking

Managing already-linked social accounts moves from one hook to focused functions.
unlinkSocialAccount() requires a Credentialunlink elevated access token — there’s no legacy fallback, so it 403s (Elevated access token required) if you call it directly. Check with checkStepUpAuth({ scope: TokenScope.Credentialunlink }) first and, if required, re-verify the user with an existing credential (email OTP, TOTP, passkey, or a connected wallet), passing requestedScopes: [TokenScope.Credentialunlink] on that call. See Registering or removing a device needs an elevated token for the full pattern — it’s the same mechanism.
Linked-account management typically lives in your profile UI — see User profile & settings.

After any method

Signing in no longer runs onboarding, MFA, device registration, or wallet creation for you. Run those steps yourself once auth resolves — see Post-login user setup.

See also

Last modified on July 22, 2026