diff --git a/src/Core/Properties/Resources.Designer.cs b/src/Core/Properties/Resources.Designer.cs
index 57a5e5b702..e39a1c63c8 100644
--- a/src/Core/Properties/Resources.Designer.cs
+++ b/src/Core/Properties/Resources.Designer.cs
@@ -207,7 +207,7 @@ namespace Microsoft.Extensions.Identity.Core
=> GetString("MustCallAddIdentity");
///
- /// No IUserTokenProvider named '{0}' is registered.
+ /// No IUserTwoFactorTokenProvider<{0}> named '{1}' is registered.
///
internal static string NoTokenProvider
{
@@ -215,10 +215,10 @@ namespace Microsoft.Extensions.Identity.Core
}
///
- /// No IUserTokenProvider named '{0}' is registered.
+ /// No IUserTwoFactorTokenProvider<{0}> named '{1}' is registered.
///
- internal static string FormatNoTokenProvider(object p0)
- => string.Format(CultureInfo.CurrentCulture, GetString("NoTokenProvider"), p0);
+ internal static string FormatNoTokenProvider(object p0, object p1)
+ => string.Format(CultureInfo.CurrentCulture, GetString("NoTokenProvider"), p0, p1);
///
/// User security stamp cannot be null.
diff --git a/src/Core/Resources.resx b/src/Core/Resources.resx
index f221b9ec6a..5b63832c57 100644
--- a/src/Core/Resources.resx
+++ b/src/Core/Resources.resx
@@ -174,8 +174,8 @@
Error when AddIdentity is not called
- No IUserTokenProvider named '{0}' is registered.
- Error when there is no IUserTokenProvider
+ No IUserTwoFactorTokenProvider<{0}> named '{1}' is registered.
+ Error when there is no IUserTwoFactorTokenProvider
User security stamp cannot be null.
diff --git a/src/Core/UserManager.cs b/src/Core/UserManager.cs
index 7e5b6832fa..ff5ac02ab8 100644
--- a/src/Core/UserManager.cs
+++ b/src/Core/UserManager.cs
@@ -1702,7 +1702,7 @@ namespace Microsoft.AspNetCore.Identity
if (!_tokenProviders.ContainsKey(tokenProvider))
{
- throw new NotSupportedException(string.Format(CultureInfo.CurrentCulture, Resources.NoTokenProvider, tokenProvider));
+ throw new NotSupportedException(Resources.FormatNoTokenProvider(nameof(TUser), tokenProvider));
}
// Make sure the token is valid
var result = await _tokenProviders[tokenProvider].ValidateAsync(purpose, token, this, user);
@@ -1737,7 +1737,7 @@ namespace Microsoft.AspNetCore.Identity
}
if (!_tokenProviders.ContainsKey(tokenProvider))
{
- throw new NotSupportedException(string.Format(CultureInfo.CurrentCulture, Resources.NoTokenProvider, tokenProvider));
+ throw new NotSupportedException(Resources.FormatNoTokenProvider(nameof(TUser), tokenProvider));
}
return _tokenProviders[tokenProvider].GenerateAsync(purpose, this, user);
@@ -1804,8 +1804,7 @@ namespace Microsoft.AspNetCore.Identity
}
if (!_tokenProviders.ContainsKey(tokenProvider))
{
- throw new NotSupportedException(String.Format(CultureInfo.CurrentCulture,
- Resources.NoTokenProvider, tokenProvider));
+ throw new NotSupportedException(Resources.FormatNoTokenProvider(nameof(TUser), tokenProvider));
}
// Make sure the token is valid
@@ -1835,8 +1834,7 @@ namespace Microsoft.AspNetCore.Identity
}
if (!_tokenProviders.ContainsKey(tokenProvider))
{
- throw new NotSupportedException(String.Format(CultureInfo.CurrentCulture,
- Resources.NoTokenProvider, tokenProvider));
+ throw new NotSupportedException(Resources.FormatNoTokenProvider(nameof(TUser), tokenProvider));
}
return _tokenProviders[tokenProvider].GenerateAsync("TwoFactor", this, user);
diff --git a/src/Specification.Tests/UserManagerSpecificationTests.cs b/src/Specification.Tests/UserManagerSpecificationTests.cs
index 69b9bbfda7..ac8bc417b8 100644
--- a/src/Specification.Tests/UserManagerSpecificationTests.cs
+++ b/src/Specification.Tests/UserManagerSpecificationTests.cs
@@ -1885,14 +1885,19 @@ namespace Microsoft.AspNetCore.Identity.Test
var manager = CreateManager();
var user = CreateTestUser();
IdentityResultAssert.IsSuccess(await manager.CreateAsync(user));
- const string error = "No IUserTokenProvider named 'bogus' is registered.";
- var ex = await
- Assert.ThrowsAsync(
- () => manager.GenerateTwoFactorTokenAsync(user, "bogus"));
+ var error = $"No IUserTwoFactorTokenProvider<{nameof(TUser)}> named 'bogus' is registered.";
+ var ex = await Assert.ThrowsAsync(
+ () => manager.GenerateTwoFactorTokenAsync(user, "bogus"));
Assert.Equal(error, ex.Message);
ex = await Assert.ThrowsAsync(
() => manager.VerifyTwoFactorTokenAsync(user, "bogus", "bogus"));
Assert.Equal(error, ex.Message);
+ ex = await Assert.ThrowsAsync(
+ () => manager.VerifyUserTokenAsync(user, "bogus", "bogus", "bogus"));
+ Assert.Equal(error, ex.Message);
+ ex = await Assert.ThrowsAsync(
+ () => manager.GenerateUserTokenAsync(user, "bogus", "bogus"));
+ Assert.Equal(error, ex.Message);
}
///