Skip to content

Commit dda7d9a

Browse files
committed
PR feedback
1 parent 6b5317b commit dda7d9a

File tree

3 files changed

+37
-5
lines changed

3 files changed

+37
-5
lines changed

src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWeb-CSharp/BlazorWeb-CSharp/Components/Account/Pages/Manage/Passkeys.razor

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ else
110110
var attestationResult = await SignInManager.PerformPasskeyAttestationAsync(Input.CredentialJson, options);
111111
if (!attestationResult.Succeeded)
112112
{
113-
RedirectManager.RedirectToCurrentPageWithStatus($"Error: Could not add the passkey: {attestationResult.Failure.Message}.", HttpContext);
113+
RedirectManager.RedirectToCurrentPageWithStatus($"Error: Could not add the passkey: {attestationResult.Failure.Message}", HttpContext);
114114
return;
115115
}
116116

src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWeb-CSharp/BlazorWeb-CSharp/Components/Account/Shared/PasskeySubmit.razor.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,9 @@ customElements.define('passkey-submit', class extends HTMLElement {
9595
// 2. The user explicitly canceled the operation.
9696
return;
9797
}
98-
const errorMessage = error.name === 'NotAllowedError' ? 'Unable to authenticate.' : error.message;
98+
const errorMessage = error.name === 'NotAllowedError'
99+
? 'No passkey was provided by the authenticator.'
100+
: error.message;
99101
formData.append(`${this.attrs.name}.Error`, errorMessage);
100102
}
101103
this.internals.setFormValue(formData);

src/ProjectTemplates/test/Templates.Blazor.Tests/BlazorTemplateTest.cs

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ await Task.WhenAll(
150150
protocol = "ctap2",
151151
transport = "internal",
152152
hasResidentKey = false,
153-
hasUserIdentification = true,
153+
hasUserVerification = true,
154154
isUserVerified = true,
155155
automaticPresenceSimulation = true,
156156
}
@@ -208,11 +208,26 @@ await Task.WhenAll(
208208

209209
await page.WaitForSelectorAsync("text=Manage your account");
210210

211+
// Check that an error is displayed if passkey creation fails
211212
await Task.WhenAll(
212213
page.WaitForURLAsync("**/Account/Manage/Passkeys**", new() { WaitUntil = WaitUntilState.NetworkIdle }),
213214
page.ClickAsync("a[href=\"Account/Manage/Passkeys\"]"));
214215

215-
// Register a new passkey
216+
await page.EvaluateAsync("""
217+
() => {
218+
navigator.credentials.create = () => {
219+
const error = new Error("Simulated passkey creation failure");
220+
error.name = "NotAllowedError";
221+
return Promise.reject(error);
222+
};
223+
}
224+
""");
225+
226+
await page.ClickAsync("text=Add a new passkey");
227+
await page.WaitForSelectorAsync("text=Error: No passkey was provided by the authenticator.");
228+
229+
// Now check that we can successfully register a passkey
230+
await page.ReloadAsync(new() { WaitUntil = WaitUntilState.NetworkIdle });
216231
await page.ClickAsync("text=Add a new passkey");
217232

218233
await page.WaitForSelectorAsync("text=Enter a name for your passkey");
@@ -221,11 +236,26 @@ await Task.WhenAll(
221236

222237
await page.WaitForSelectorAsync("text=Passkey updated successfully");
223238

224-
// Login with the passkey
239+
// Check that an error is displayed if passkey retrieval fails
225240
await Task.WhenAll(
226241
page.WaitForURLAsync("**/Account/Login**", new() { WaitUntil = WaitUntilState.NetworkIdle }),
227242
page.ClickAsync("text=Logout"));
228243

244+
await page.EvaluateAsync("""
245+
() => {
246+
navigator.credentials.get = () => {
247+
const error = new Error("Simulated passkey retrieval failure");
248+
error.name = "NotAllowedError";
249+
return Promise.reject(error);
250+
};
251+
}
252+
""");
253+
254+
await page.ClickAsync("text=Log in with a passkey");
255+
await page.WaitForSelectorAsync("text=Error: No passkey was provided by the authenticator.");
256+
257+
// Now check that we can successfully login with the passkey
258+
await page.ReloadAsync(new() { WaitUntil = WaitUntilState.NetworkIdle });
229259
await page.WaitForSelectorAsync("[name=\"Input.Email\"]");
230260
await page.FillAsync("[name=\"Input.Email\"]", userName);
231261

0 commit comments

Comments
 (0)