useSignInFlow()
import { useSignInFlow } from '@auth/clerk'
- useSignInFlow()
Use this hook to build a custom sign-in experience with Zod based form state included. Wraps Clerk’s useSignIn()
and our useSocialAuthFlow()
to provide a simple API for email/password or social sign-ins, plus navigation and status handling.
Usage
SignInScreen.tsx
import { useSignInFlow } from '@auth/clerk'
export const SignInScreen = () => {
const {
formState,
isLoaded,
isLoading,
onSignInPressed,
onPressSocialSignIn,
signInError,
signInStatus,
} = useSignInFlow({
forceRedirectUrl: '/',
initialValues: { emailAddress: '', password: '' },
})
if (!isLoaded) return null
return (
<View>
<TextInput
value={formState.values.emailAddress}
onChangeText={(v) => formState.setFieldValue('emailAddress', v)}
placeholder="Email"
autoCapitalize="none"
/>
<TextInput
value={formState.values.password}
onChangeText={(v) => formState.setFieldValue('password', v)}
placeholder="Password"
secureTextEntry
/>
<Button disabled={isLoading} onPress={onSignInPressed} title="Sign in" />
<Button disabled={isLoading} onPress={() => onPressSocialSignIn('oauth_google')} title="Continue with Google" />
{!!signInError && <Text>{signInError}</Text>}
{!!signInStatus && <Text>Status: {signInStatus}</Text>}
</View>
)
}
API
Parameters
forceRedirectUrl?: string | null
— When sign-in completes, navigate to this URL (defaults to/
).initialValues?: Partial<SignInFormState>
— Prefill the form state.
Returned values
formState: UseFormState<SignInFormState>
— Controlled form state withvalues
,setFieldValue
, etc.isLoaded: boolean
— Underlying ClerkuseSignIn()
loaded state.isLoading: boolean
— Local submitting/processing state.onSignInPressed: () => Promise<void>
— Email/username + password sign-in handler.router
— Universal navigation object fromuseRouter()
.signIn
— ClerksignIn
resource.signInStatus: SignInStatus | null
— Most recent sign-in status when notcomplete
.setActive
— ClerksetActive
to set the active session on success.setIsLoading
,setSignInStatus
,setSignInError
— Local setters.signInError: string | null
— Last user-facing error message.
Form shape
type SignInFormState = {
emailAddress: string
password: string
username?: string
}
See Clerk’s guide on error handling for custom flows: https://clerk.com/docs/guides/development/custom-flows/error-handling