Docs

<SignIn /> component

The <SignIn /> component renders a UI for signing in users.

The <SignIn /> component renders a UI for signing in users. The functionality of the <SignIn /> component is controlled by the instance settings you specify in the Clerk Dashboard, such as sign-in and sign-up options and social connections. You can further customize your <SignIn /> component by passing additional properties at the time of rendering.

Note

The <SignUp/> and <SignIn/> components cannot render when a user is already signed in, unless the application allows multiple sessions. If a user is already signed in and the application only allows a single session, Clerk will redirect the user to the Home URL instead.

Properties

All props are optional.

  • Name
    appearance
    Type
    Appearance | undefined
    Description

    Optional object to style your components. Will only affect Clerk components and not Account Portal pages.

  • Name
    routing
    Type
    'hash' | 'path' | 'virtual'
    Description

    The routing strategy for your pages.
    Defaults to 'path' in Next.js and Remix applications. Defaults to hash for all other SDK's.

  • Name
    path
    Type
    string
    Description

    The path where the component is mounted on when routing is set to path. It is ignored in hash- and virtual-based routing.
    For example: /sign-in.

  • Name
    signUpUrl
    Type
    string
    Description

    Full URL or path to the sign up page. Use this property to provide the target of the 'Sign Up' link that's rendered. It's recommended to use the environment variable instead.

  • Name
    forceRedirectUrl?
    Type
    string
    Description

    If provided, this URL will always be redirected to after the user signs in. Takes priority over deprecated props such as afterSignInUrl and redirectUrl. It's recommended to use the environment variable instead.

  • Name
    fallbackRedirectUrl?
    Type
    string
    Description

    The fallback URL to redirect to after the user signs in, if there's no redirect_url in the path already. Defaults to /. Takes priority over deprecated props such as afterSignInUrl and redirectUrl. It's recommended to use the environment variable instead.

  • Name
    signUpForceRedirectUrl?
    Type
    string
    Description

    If provided, this URL will always be redirected to after the user signs up. Takes priority over deprecated props such as afterSignInUrl and redirectUrl. It's recommended to use the environment variable instead.

  • Name
    signUpFallbackRedirectUrl?
    Type
    string
    Description

    The fallback URL to redirect to after the user signs up, if there's no redirect_url in the path already. Defaults to /. Takes priority over deprecated props such as afterSignInUrl and redirectUrl. It's recommended to use the environment variable instead.

  • Name
    initialValues
    Type
    SignInInitialValues
    Description

    The values used to prefill the sign-in fields with.

  • Name
    transferable?
    Type
    boolean
    Description

    Indicates whether or not sign in attempts are transferable to the sign up flow. Defaults to true. When set to false, prevents opaque sign ups when a user attempts to sign in via OAuth with an email that doesn't exist. See OAuth account transfer flows for more information.

  • Name
    waitlistUrl?
    Type
    string
    Description

    Full URL or path to the waitlist page. Use this property to provide the target of the 'Waitlist' link that's rendered. If undefined, will redirect to the Account Portal waitlist page. If you've passed the waitlistUrl prop to the <ClerkProvider> component, it will infer from that, and you can omit this prop.

Usage with frameworks

The following example includes basic implementation of the <SignIn /> component. You can use this as a starting point for your own implementation.

The following example demonstrates how you can use the <SignIn /> component on a public page.

If you would like to create a dedicated /sign-in page in your Next.js application, see the dedicated guide.

app/page.tsx
import { SignIn, useUser } from '@clerk/nextjs'

export default function Home() {
  const { user } = useUser()

  if (!user) {
    return <SignIn />
  }

  return <div>Welcome!</div>
}
/src/sign-in/[[...index]].tsx
import { SignIn } from '@clerk/clerk-react'

const SignInPage = () => <SignIn path="/sign-in" />

export default SignInPage
app/routes/sign-in/$.tsx
import { SignIn } from '@clerk/remix'

export default function SignInPage() {
  return (
    <div style={{ border: '2px solid blue', padding: '2rem' }}>
      <h1>Sign In route</h1>
      <SignIn />
    </div>
  )
}
pages/sign-in.astro
---
import { SignIn } from '@clerk/astro/components'
---

<SignIn path="/sign-in" />

Usage with JavaScript

The following methods available on an instance of the Clerk class are used to render and control the <SignIn /> component:

The following examples assume that you have followed the quickstart in order to add Clerk to your JavaScript application.

mountSignIn()

Render the <SignIn /> component to an HTML <div> element.

function mountSignIn(node: HTMLDivElement, props?: SignInProps): void
  • Name
    node
    Type
    HTMLDivElement
    Description

    The container <div> element used to render in the <SignIn /> component

  • Name
    props?
    Type
    SignInProps
    Description

    The properties to pass to the <SignIn /> component

main.js
import { Clerk } from '@clerk/clerk-js'

// Initialize Clerk with your Clerk Publishable Key
const clerkPubKey = import.meta.env.VITE_CLERK_PUBLISHABLE_KEY

const clerk = new Clerk(clerkPubKey)
await clerk.load()

document.getElementById('app').innerHTML = `
  <div id="sign-in"></div>
`

const signInDiv = document.getElementById('sign-in')

clerk.mountSignIn(signInDiv)

unmountSignIn()

Unmount and run cleanup on an existing <SignIn /> component instance.

function unmountSignIn(node: HTMLDivElement): void
  • Name
    node
    Type
    HTMLDivElement
    Description

    The container <div> element with a rendered <SignIn /> component instance

index.js
import { Clerk } from '@clerk/clerk-js'

// Initialize Clerk with your Clerk Publishable Key
const clerkPubKey = import.meta.env.VITE_CLERK_PUBLISHABLE_KEY

const clerk = new Clerk(clerkPubKey)
await clerk.load()

document.getElementById('app').innerHTML = `
  <div id="sign-in"></div>
`

const signInDiv = document.getElementById('sign-in')

clerk.mountSignIn(signInDiv)

// ...

clerk.unmountSignIn(signInDiv)

openSignIn()

Opens the <SignIn /> component as an overlay at the root of your HTML body element.

function openSignIn(props?: SignInProps): void
  • Name
    props?
    Type
    SignInProps
    Description

    The properties to pass to the <SignIn /> component.

main.js
import { Clerk } from '@clerk/clerk-js'

// Initialize Clerk with your Clerk Publishable Key
const clerkPubKey = import.meta.env.VITE_CLERK_PUBLISHABLE_KEY

const clerk = new Clerk(clerkPubKey)
await clerk.load()

clerk.openSignIn()

closeSignIn()

Closes the sign in overlay.

function closeSignIn(): void
index.js
import { Clerk } from '@clerk/clerk-js'

// Initialize Clerk with your Clerk Publishable Key
const clerkPubKey = import.meta.env.VITE_CLERK_PUBLISHABLE_KEY

const clerk = new Clerk(clerkPubKey)
await clerk.load()

clerk.openSignIn()

// ...

clerk.closeSignIn()

Customization

To learn about how to customize Clerk components, see the customization documentation.

Feedback

What did you think of this content?

Last updated on