diff --git a/src/pages/[platform]/build-a-backend/auth/connect-your-frontend/sign-in/index.mdx b/src/pages/[platform]/build-a-backend/auth/connect-your-frontend/sign-in/index.mdx
index 21210131b1c..590daa686f4 100644
--- a/src/pages/[platform]/build-a-backend/auth/connect-your-frontend/sign-in/index.mdx
+++ b/src/pages/[platform]/build-a-backend/auth/connect-your-frontend/sign-in/index.mdx
@@ -1123,7 +1123,79 @@ Your application's users can also sign in using passwordless methods. To learn m
-{/* */}
+
+
+
+```swift
+// sign in with `smsOTP` as preferred factor
+func signIn(username: String) async {
+ do {
+ let pluginOptions = AWSAuthSignInOptions(
+ authFlowType: .userAuth(preferredFirstFactor: .smsOTP))
+ let signInResult = try await Amplify.Auth.signIn(
+ username: username,
+ options: .init(pluginOptions: pluginOptions))
+ print("Sign in succeeded. Next step: \(signInResult.nextStep)")
+ } catch let error as AuthError {
+ print("Sign in failed \(error)")
+ } catch {
+ print("Unexpected error: \(error)")
+ }
+}
+
+// confirm sign in with the code received
+func confirmSignIn() async {
+ do {
+ let signInResult = try await Amplify.Auth.confirmSignIn(challengeResponse: "")
+ print("Confirm sign in succeeded. Next step: \(signInResult.nextStep)")
+ } catch let error as AuthError {
+ print("Confirm sign in failed \(error)")
+ } catch {
+ print("Unexpected error: \(error)")
+ }
+}
+
+```
+
+
+
+
+```swift
+// sign in with `smsOTP` as preferred factor
+func signIn(username: String) -> AnyCancellable {
+ Amplify.Publisher.create {
+ let pluginOptions = AWSAuthSignInOptions(
+ authFlowType: .userAuth(preferredFirstFactor: .smsOTP))
+ try await Amplify.Auth.signIn(
+ username: username,
+ options: .init(pluginOptions: pluginOptions))
+ }.sink {
+ if case let .failure(authError) = $0 {
+ print("Sign in failed \(authError)")
+ }
+ }
+ receiveValue: { signInResult in
+ print("Sign in succeeded. Next step: \(signInResult.nextStep)")
+ }
+}
+
+// confirm sign in with the code received
+func confirmSignIn() -> AnyCancellable {
+ Amplify.Publisher.create {
+ try await Amplify.Auth.confirmSignIn(challengeResponse: "")
+ }.sink {
+ if case let .failure(authError) = $0 {
+ print("Confirm sign in failed \(authError)")
+ }
+ }
+ receiveValue: { signInResult in
+ print("Confirm sign in succeeded. Next step: \(signInResult.nextStep)")
+ }
+}
+```
+
+
+
@@ -1143,26 +1215,78 @@ Your application's users can also sign in using passwordless methods. To learn m
-{/* */}
-
-
-
-### WebAuthn Passkeys
+
+
-{/* blurb with supplemental information about handling sign-in, events, etc. */}
+```swift
+// sign in with `emailOTP` as preferred factor
+func signIn(username: String) async {
+ do {
+ let pluginOptions = AWSAuthSignInOptions(
+ authFlowType: .userAuth(preferredFirstFactor: .emailOTP))
+ let signInResult = try await Amplify.Auth.signIn(
+ username: username,
+ options: .init(pluginOptions: pluginOptions))
+ print("Sign in succeeded. Next step: \(signInResult.nextStep)")
+ } catch let error as AuthError {
+ print("Sign in failed \(error)")
+ } catch {
+ print("Unexpected error: \(error)")
+ }
+}
-
+// confirm sign in with the code received
+func confirmSignIn() async {
+ do {
+ let signInResult = try await Amplify.Auth.confirmSignIn(challengeResponse: "")
+ print("Confirm sign in succeeded. Next step: \(signInResult.nextStep)")
+ } catch let error as AuthError {
+ print("Confirm sign in failed \(error)")
+ } catch {
+ print("Unexpected error: \(error)")
+ }
+}
-{/* */}
+```
-
-
+
+
-{/* */}
+```swift
+// sign in with `emailOTP` as preferred factor
+func signIn(username: String) -> AnyCancellable {
+ Amplify.Publisher.create {
+ let pluginOptions = AWSAuthSignInOptions(
+ authFlowType: .userAuth(preferredFirstFactor: .emailOTP))
+ try await Amplify.Auth.signIn(
+ username: username,
+ options: .init(pluginOptions: pluginOptions))
+ }.sink {
+ if case let .failure(authError) = $0 {
+ print("Sign in failed \(authError)")
+ }
+ }
+ receiveValue: { signInResult in
+ print("Sign in succeeded. Next step: \(signInResult.nextStep)")
+ }
+}
-
-
+// confirm sign in with the code received
+func confirmSignIn() -> AnyCancellable {
+ Amplify.Publisher.create {
+ try await Amplify.Auth.confirmSignIn(challengeResponse: "")
+ }.sink {
+ if case let .failure(authError) = $0 {
+ print("Confirm sign in failed \(authError)")
+ }
+ }
+ receiveValue: { signInResult in
+ print("Confirm sign in succeeded. Next step: \(signInResult.nextStep)")
+ }
+}
+```
-{/* */}
+
+
diff --git a/src/pages/[platform]/build-a-backend/auth/connect-your-frontend/switching-authentication-flows/index.mdx b/src/pages/[platform]/build-a-backend/auth/connect-your-frontend/switching-authentication-flows/index.mdx
index e6aa8d34499..6908651272b 100644
--- a/src/pages/[platform]/build-a-backend/auth/connect-your-frontend/switching-authentication-flows/index.mdx
+++ b/src/pages/[platform]/build-a-backend/auth/connect-your-frontend/switching-authentication-flows/index.mdx
@@ -69,7 +69,7 @@ guard case .continueSignInWithFirstFactorSelection(let availableFactors) = signI
print("Available factors: \(availableFactors)")
```
-The selection of the authentication method is done by the user. The user can choose from the available factors and proceed with the selected factor. You should call the `confirmSignIn` API with the selected factor to continue the sign-in process. Followign is an example if you want to proceed with the `emailOTP` factor selection:
+The selection of the authentication method is done by the user. The user can choose from the available factors and proceed with the selected factor. You should call the `confirmSignIn` API with the selected factor to continue the sign-in process. Following is an example if you want to proceed with the `emailOTP` factor selection:
```swift
// Select emailOTP as the factor
diff --git a/src/pages/[platform]/build-a-backend/auth/manage-users/manage-webauthn-credentials/index.mdx b/src/pages/[platform]/build-a-backend/auth/manage-users/manage-webauthn-credentials/index.mdx
index b25cdf62aaf..3b22e120501 100644
--- a/src/pages/[platform]/build-a-backend/auth/manage-users/manage-webauthn-credentials/index.mdx
+++ b/src/pages/[platform]/build-a-backend/auth/manage-users/manage-webauthn-credentials/index.mdx
@@ -27,3 +27,178 @@ export function getStaticProps() {
};
}
+## Associate WebAuthN credentials
+
+
+
+{/* */}
+
+
+
+
+{/* */}
+
+
+
+
+
+
+
+```swift
+func associateWebAuthNCredentials() async {
+ do {
+ try await Amplify.Auth.associateWebAuthnCredential()
+ print("WebAuthn credential was associated")
+ } catch {
+ print("Associate WebAuthn Credential failed: \(error)")
+ }
+}
+```
+
+
+
+
+```swift
+func associateWebAuthNCredentials() -> AnyCancellable {
+ Amplify.Publisher.create {
+ try await Amplify.Auth.associateWebAuthnCredential()
+ }.sink {
+ print("Associate WebAuthn Credential failed: \($0)")
+ }
+ receiveValue: { _ in
+ print("WebAuthn credential was associated")
+ }
+}
+```
+
+
+
+
+
+
+## List WebAuthN credentials
+
+
+
+{/* */}
+
+
+
+
+{/* */}
+
+
+
+
+
+
+
+```swift
+func listWebAuthNCredentials() async {
+ do {
+ let result = try await Amplify.Auth.listWebAuthnCredentials(
+ options: .init(pageSize: 5))
+
+ for credential in result.credentials {
+ print("Credential ID: \(credential.credentialId)")
+ print("Created At: \(credential.createdAt)")
+ print("Relying Party Id: \(credential.relyingPartyId)")
+ if let friendlyName = credential.friendlyName {
+ print("Friendly name: \(friendlyName)")
+ }
+ }
+
+ // Fetch the next page
+ if let nextToken = result.nextToken {
+ let nextResult = try await Amplify.Auth.listWebAuthnCredentials(
+ options: .init(
+ pageSize: 5,
+ nextToken: nextToken))
+ }
+ } catch {
+ print("Associate WebAuthn Credential failed: \(error)")
+ }
+}
+```
+
+
+
+
+```swift
+func listWebAuthNCredentials() -> AnyCancellable {
+ Amplify.Publisher.create {
+ try await Amplify.Auth.listWebAuthnCredentials(
+ options: .init(pageSize: 5))
+ }.sink {
+ print("List WebAuthn Credential failed: \($0)")
+ }
+ receiveValue: { result in
+ for credential in result.credentials {
+ print("Credential ID: \(credential.credentialId)")
+ print("Created At: \(credential.createdAt)")
+ print("Relying Party Id: \(credential.relyingPartyId)")
+ if let friendlyName = credential.friendlyName {
+ print("Friendly name: \(friendlyName)")
+ }
+ }
+
+ if let nextToken = result.nextToken {
+ // Fetch the next page
+ }
+ }
+}
+```
+
+
+
+
+
+
+## Delete WebAuthN credentials
+
+
+
+{/* */}
+
+
+
+
+{/* */}
+
+
+
+
+
+
+
+```swift
+func deleteWebAuthNCredentials(credentialId: String) async {
+ do {
+ try await Amplify.Auth.deleteWebAuthnCredential(credentialId: credentialId)
+ print("WebAuthn credential was deleted")
+ } catch {
+ print("Delete WebAuthn Credential failed: \(error)")
+ }
+}
+```
+
+
+
+
+```swift
+func deleteWebAuthNCredentials(credentialId: String) -> AnyCancellable {
+ Amplify.Publisher.create {
+ try await Amplify.Auth.deleteWebAuthnCredential(credentialId: credentialId)
+ }.sink {
+ print("Delete WebAuthn Credential failed: \($0)")
+ }
+ receiveValue: { _ in
+ print("WebAuthn credential was deleted")
+ }
+}
+```
+
+
+
+
+