Authentication flows
Use Auth for sign-in and sign-up flows, and to manage sessions. You can access auth with clerk.auth.
Sign in
Sign in with password
Sign in directly with an identifier (email, phone, or username) and password:
var signIn = try await clerk.auth.signInWithPassword(
identifier: "user@email.com",
password: "secretpassword"
)Sign in with OTP (email)
Send an to the supplied email, and then verify the code.
var signIn = try await clerk.auth.signInWithEmailCode(emailAddress: "user@email.com")
signIn = try await signIn.verifyCode("123456")Sign in with OTP (phone)
Send an to the supplied phone number, and then verify the code.
var signIn = try await clerk.auth.signInWithPhoneCode(phoneNumber: "+1234567890")
signIn = try await signIn.verifyCode("123456")Sign in with OAuth
Sign in using an OAuth provider (e.g., Google, GitHub, see all providers):
var result = try await clerk.auth.signInWithOAuth(provider: .google)Sign in with Apple
Sign in using Sign in with Apple:
var result = try await clerk.auth.signInWithApple()See the Sign in with Apple guide for native iOS setup.
Sign in with ID token
Sign in with an ID token from a provider:
var result = try await clerk.auth.signInWithIdToken(
idToken,
provider: .apple
)Sign in with passkey
Sign in using a passkey:
var signIn = try await clerk.auth.signInWithPasskey()Sign in with Enterprise SSO
Sign in using Enterprise SSO:
var result = try await clerk.auth.signInWithEnterpriseSSO(emailAddress: "user@company.com")Sign in with ticket
Sign in using a ticket generated from the Backend API:
var signIn = try await clerk.auth.signInWithTicket(ticket)Sign in with email link
Send an email link to the supplied email address. After the user opens the link, handle the callback with clerk.handle(url).
let signIn = try await clerk.auth.signInWithEmailLink(emailAddress: "user@email.com")
// Show a message that tells the user to check their email.Sign in with identifier
Start a sign-in with an identifier (email, phone, or username):
// Email
var signIn = try await clerk.auth.signIn("user@email.com")// Phone
var signIn = try await clerk.auth.signIn("+1234567890")// Username
var signIn = try await clerk.auth.signIn("johndoe")Continue an existing sign-in
Use these methods when you already have a SignIn from clerk.auth.signIn() or clerk.auth.currentSignIn, and want to complete it with a specific factor or provider.
Send and verify email code
Send the user an via email to verify their sign-in. Then verify the code that the user supplies:
signIn = try await signIn.sendEmailCode()
signIn = try await signIn.verifyCode("123456")Send email link
Send the user an email link to verify their sign-in. After the user opens the link, handle the callback with clerk.handle(url).
signIn = try await signIn.sendEmailLink()
// Show a message that tells the user to check their email.Send and verify phone code
Send the user an via SMS to verify their sign-in. Then verify the code that the user supplies:
signIn = try await signIn.sendPhoneCode()
signIn = try await signIn.verifyCode("123456")signIn = try await signIn.authenticateWithPassword("secretpassword")Authenticate with OAuth
Authenticate with an OAuth provider (e.g., Google, GitHub, see all providers):
var result = try await signIn.authenticateWithOAuth(provider: .google)var result = try await signIn.authenticateWithEnterpriseSSO()var result = try await signIn.authenticateWithApple()See the Sign in with Apple guide for native iOS setup.
Authenticate with ID token
signIn = try await signIn.authenticateWithIdToken(
idToken,
provider: .apple
)signIn = try await signIn.authenticateWithPasskey()Multi-factor authentication
After completing first factor verification, if multi-factor authentication (MFA) is required, use these methods to complete the second factor verification. The examples assume you already have a SignIn from a sign-in flow.
MFA with phone code
Send and verify an MFA code via SMS:
signIn = try await signIn.sendMfaPhoneCode()
signIn = try await signIn.verifyMfaCode(
"123456",
type: .phoneCode
)MFA with email code
Send and verify an MFA code via email:
signIn = try await signIn.sendMfaEmailCode()
signIn = try await signIn.verifyMfaCode(
"123456",
type: .emailCode
)MFA with TOTP (authenticator app)
Verify using a TOTP code from an authenticator app:
signIn = try await signIn.verifyMfaCode(
"123456",
type: .totp
)MFA with backup code
Verify using a backup code:
signIn = try await signIn.verifyMfaCode(
"backup123",
type: .backupCode
)Password reset
The Clerk iOS SDK provides methods to reset user passwords via email or phone verification.
Password reset with email
Reset password using email verification:
var signIn = try await clerk.auth.signIn("user@email.com")
signIn = try await signIn.sendResetPasswordEmailCode()
signIn = try await signIn.verifyCode("123456")
signIn = try await signIn.resetPassword(
newPassword: "newpassword",
signOutOfOtherSessions: true
)Password reset with phone
Reset password using phone verification:
var signIn = try await clerk.auth.signIn("+1234567890")
signIn = try await signIn.sendResetPasswordPhoneCode()
signIn = try await signIn.verifyCode("123456")
signIn = try await signIn.resetPassword(
newPassword: "newpassword",
signOutOfOtherSessions: true
)var signUp = try await clerk.auth.signUp(
emailAddress: "newuser@email.com",
phoneNumber: "+1234567890",
password: "secretpassword",
firstName: "John",
lastName: "Doe",
username: "johndoe",
legalAccepted: true
)Update a sign-up
Update sign-up information:
signUp = try await signUp.update(
emailAddress: "newuser@email.com",
phoneNumber: "+1234567890",
password: "secretpassword",
firstName: "John",
lastName: "Doe",
username: "johndoe",
legalAccepted: true
)Sign up with OAuth
Sign up using an OAuth provider (e.g., Google, GitHub, see all providers):
var result = try await clerk.auth.signUpWithOAuth(provider: .google)Sign up with Apple
Sign up using Sign in with Apple:
var result = try await clerk.auth.signUpWithApple()See the Sign in with Apple guide for native iOS setup.
Sign up with ID token
Sign up using an ID token:
var result = try await clerk.auth.signUpWithIdToken(
idToken,
provider: .apple,
firstName: "John",
lastName: "Doe"
)Sign up with Enterprise SSO
Sign up using Enterprise SSO:
var result = try await clerk.auth.signUpWithEnterpriseSSO(emailAddress: "user@company.com")Sign up with ticket
Sign up using a ticket generated from the Backend API:
var signUp = try await clerk.auth.signUpWithTicket(ticket)Continue an existing sign-up
Use these methods when you already have a SignUp from clerk.auth.signUp() or clerk.auth.currentSignUp and want to complete it with a specific factor or provider.
Send and verify email via OTP
Send the user an via email to verify their account. Then verify the code that the user supplies:
signUp = try await signUp.sendEmailCode()
signUp = try await signUp.verifyEmailCode("123456")Send email link
Send the user an email link to verify their account. After the user opens the link, handle the callback with clerk.handle(url).
signUp = try await signUp.sendEmailLink()
// Show a message that tells the user to check their email.Send and verify phone via OTP
Send the user an via SMS to verify their account. Then verify the code that the user supplies:
signUp = try await signUp.sendPhoneCode()
signUp = try await signUp.verifyPhoneCode("123456")Current sign-in/sign-up
Access the in-progress sign-in or sign-up stored on the client for multi-step flows.
Current sign-in
let currentSignIn = clerk.auth.currentSignInlet currentSignUp = clerk.auth.currentSignUpSession management
The Clerk iOS SDK provides methods to manage user sessions, including signing out, switching sessions, and revoking sessions.
Sessions
Retrieve all sessions for the current client:
let sessions = clerk.auth.sessionsGet session token
Retrieve the user's session token:
guard let token = try await clerk.auth.getToken() else { return }Use this token when calling your backend to authenticate the request:
var request = URLRequest(url: url)
request.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization")Set current session
Set the current session and optionally the :
try await clerk.auth.setActive(
sessionId: sessionId,
organizationId: organizationId
)Revoke session
Revoke a specific session:
let revokedSession = try await clerk.auth.revokeSession(session)Sign out
Sign out the current user:
// Sign out from all sessions.
try await clerk.auth.signOut()
// Sign out from a specific session.
try await clerk.auth.signOut(sessionId: sessionId)Deep linking
Handle OAuth, SSO, and email link deep link callbacks in your SwiftUI app:
.onOpenURL { url in
Task {
try? await clerk.handle(url)
}
}Feedback
Last updated on