Make IHttpContextAccessor Optional
This commit is contained in:
parent
042588e1b2
commit
167bb54c8d
|
|
@ -41,7 +41,7 @@ namespace Microsoft.AspNet.Identity
|
||||||
{
|
{
|
||||||
throw new ArgumentNullException(nameof(userManager));
|
throw new ArgumentNullException(nameof(userManager));
|
||||||
}
|
}
|
||||||
if (contextAccessor == null || contextAccessor.HttpContext == null)
|
if (contextAccessor == null)
|
||||||
{
|
{
|
||||||
throw new ArgumentNullException(nameof(contextAccessor));
|
throw new ArgumentNullException(nameof(contextAccessor));
|
||||||
}
|
}
|
||||||
|
|
@ -51,12 +51,15 @@ namespace Microsoft.AspNet.Identity
|
||||||
}
|
}
|
||||||
|
|
||||||
UserManager = userManager;
|
UserManager = userManager;
|
||||||
Context = contextAccessor.HttpContext;
|
_contextAccessor = contextAccessor;
|
||||||
ClaimsFactory = claimsFactory;
|
ClaimsFactory = claimsFactory;
|
||||||
Options = optionsAccessor?.Value ?? new IdentityOptions();
|
Options = optionsAccessor?.Value ?? new IdentityOptions();
|
||||||
Logger = logger;
|
Logger = logger;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private readonly IHttpContextAccessor _contextAccessor;
|
||||||
|
private HttpContext _context;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the <see cref="ILogger"/> used to log messages from the manager.
|
/// Gets the <see cref="ILogger"/> used to log messages from the manager.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
@ -65,10 +68,26 @@ namespace Microsoft.AspNet.Identity
|
||||||
/// </value>
|
/// </value>
|
||||||
protected internal virtual ILogger Logger { get; set; }
|
protected internal virtual ILogger Logger { get; set; }
|
||||||
protected internal UserManager<TUser> UserManager { get; set; }
|
protected internal UserManager<TUser> UserManager { get; set; }
|
||||||
internal HttpContext Context { get; set; }
|
|
||||||
internal IUserClaimsPrincipalFactory<TUser> ClaimsFactory { get; set; }
|
internal IUserClaimsPrincipalFactory<TUser> ClaimsFactory { get; set; }
|
||||||
internal IdentityOptions Options { get; set; }
|
internal IdentityOptions Options { get; set; }
|
||||||
|
|
||||||
|
internal HttpContext Context {
|
||||||
|
get
|
||||||
|
{
|
||||||
|
var context = _context ?? _contextAccessor?.HttpContext;
|
||||||
|
if (context == null)
|
||||||
|
{
|
||||||
|
throw new InvalidOperationException("HttpContext must not be null.");
|
||||||
|
}
|
||||||
|
return context;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_context = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Creates a <see cref="ClaimsPrincipal"/> for the specified <paramref name="user"/>, as an asynchronous operation.
|
/// Creates a <see cref="ClaimsPrincipal"/> for the specified <paramref name="user"/>, as an asynchronous operation.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
||||||
|
|
@ -54,8 +54,7 @@ namespace Microsoft.AspNet.Identity
|
||||||
ILookupNormalizer keyNormalizer,
|
ILookupNormalizer keyNormalizer,
|
||||||
IdentityErrorDescriber errors,
|
IdentityErrorDescriber errors,
|
||||||
IServiceProvider services,
|
IServiceProvider services,
|
||||||
ILogger<UserManager<TUser>> logger,
|
ILogger<UserManager<TUser>> logger)
|
||||||
IHttpContextAccessor contextAccessor)
|
|
||||||
{
|
{
|
||||||
if (store == null)
|
if (store == null)
|
||||||
{
|
{
|
||||||
|
|
@ -63,7 +62,6 @@ namespace Microsoft.AspNet.Identity
|
||||||
}
|
}
|
||||||
Store = store;
|
Store = store;
|
||||||
Options = optionsAccessor?.Value ?? new IdentityOptions();
|
Options = optionsAccessor?.Value ?? new IdentityOptions();
|
||||||
_context = contextAccessor?.HttpContext;
|
|
||||||
PasswordHasher = passwordHasher;
|
PasswordHasher = passwordHasher;
|
||||||
KeyNormalizer = keyNormalizer;
|
KeyNormalizer = keyNormalizer;
|
||||||
ErrorDescriber = errors;
|
ErrorDescriber = errors;
|
||||||
|
|
@ -86,6 +84,7 @@ namespace Microsoft.AspNet.Identity
|
||||||
|
|
||||||
if (services != null)
|
if (services != null)
|
||||||
{
|
{
|
||||||
|
_context = services.GetService<IHttpContextAccessor>()?.HttpContext;
|
||||||
foreach (var providerName in Options.Tokens.ProviderMap.Keys)
|
foreach (var providerName in Options.Tokens.ProviderMap.Keys)
|
||||||
{
|
{
|
||||||
var provider = services.GetRequiredService(Options.Tokens.ProviderMap[providerName].ProviderType) as IUserTokenProvider<TUser>;
|
var provider = services.GetRequiredService(Options.Tokens.ProviderMap[providerName].ProviderType) as IUserTokenProvider<TUser>;
|
||||||
|
|
|
||||||
|
|
@ -255,7 +255,7 @@ namespace Microsoft.AspNet.Identity.Test
|
||||||
|
|
||||||
private class MyUserManager : UserManager<TestUser>
|
private class MyUserManager : UserManager<TestUser>
|
||||||
{
|
{
|
||||||
public MyUserManager(IUserStore<TestUser> store) : base(store, null, null, null, null, null, null, null, null, null) { }
|
public MyUserManager(IUserStore<TestUser> store) : base(store, null, null, null, null, null, null, null, null) { }
|
||||||
}
|
}
|
||||||
|
|
||||||
private class MyRoleManager : RoleManager<TestRole>
|
private class MyRoleManager : RoleManager<TestRole>
|
||||||
|
|
|
||||||
|
|
@ -73,7 +73,6 @@ namespace Microsoft.AspNet.Identity.Test
|
||||||
var userManager = MockHelpers.MockUserManager<TestUser>().Object;
|
var userManager = MockHelpers.MockUserManager<TestUser>().Object;
|
||||||
Assert.Throws<ArgumentNullException>("contextAccessor", () => new SignInManager<TestUser>(userManager, null, null, null, null));
|
Assert.Throws<ArgumentNullException>("contextAccessor", () => new SignInManager<TestUser>(userManager, null, null, null, null));
|
||||||
var contextAccessor = new Mock<IHttpContextAccessor>();
|
var contextAccessor = new Mock<IHttpContextAccessor>();
|
||||||
Assert.Throws<ArgumentNullException>("contextAccessor", () => new SignInManager<TestUser>(userManager, contextAccessor.Object, null, null, null));
|
|
||||||
var context = new Mock<HttpContext>();
|
var context = new Mock<HttpContext>();
|
||||||
contextAccessor.Setup(a => a.HttpContext).Returns(context.Object);
|
contextAccessor.Setup(a => a.HttpContext).Returns(context.Object);
|
||||||
Assert.Throws<ArgumentNullException>("claimsFactory", () => new SignInManager<TestUser>(userManager, contextAccessor.Object, null, null, null));
|
Assert.Throws<ArgumentNullException>("claimsFactory", () => new SignInManager<TestUser>(userManager, contextAccessor.Object, null, null, null));
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,7 @@ namespace Microsoft.AspNet.Identity.Test
|
||||||
|
|
||||||
public class CustomUserManager : UserManager<TestUser>
|
public class CustomUserManager : UserManager<TestUser>
|
||||||
{
|
{
|
||||||
public CustomUserManager() : base(new Mock<IUserStore<TestUser>>().Object, null, null, null, null, null, null, null, null, null)
|
public CustomUserManager() : base(new Mock<IUserStore<TestUser>>().Object, null, null, null, null, null, null, null, null)
|
||||||
{ }
|
{ }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -694,7 +694,7 @@ namespace Microsoft.AspNet.Identity.Test
|
||||||
public async Task ManagerPublicNullChecks()
|
public async Task ManagerPublicNullChecks()
|
||||||
{
|
{
|
||||||
Assert.Throws<ArgumentNullException>("store",
|
Assert.Throws<ArgumentNullException>("store",
|
||||||
() => new UserManager<TestUser>(null, null, null, null, null, null, null, null, null, null));
|
() => new UserManager<TestUser>(null, null, null, null, null, null, null, null, null));
|
||||||
|
|
||||||
var manager = MockHelpers.TestUserManager(new NotImplementedStore());
|
var manager = MockHelpers.TestUserManager(new NotImplementedStore());
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ namespace Microsoft.AspNet.Identity.Test
|
||||||
public static Mock<UserManager<TUser>> MockUserManager<TUser>() where TUser : class
|
public static Mock<UserManager<TUser>> MockUserManager<TUser>() where TUser : class
|
||||||
{
|
{
|
||||||
var store = new Mock<IUserStore<TUser>>();
|
var store = new Mock<IUserStore<TUser>>();
|
||||||
var mgr = new Mock<UserManager<TUser>>(store.Object, null, null, null, null, null, null, null, null, null);
|
var mgr = new Mock<UserManager<TUser>>(store.Object, null, null, null, null, null, null, null, null);
|
||||||
mgr.Object.UserValidators.Add(new UserValidator<TUser>());
|
mgr.Object.UserValidators.Add(new UserValidator<TUser>());
|
||||||
mgr.Object.PasswordValidators.Add(new PasswordValidator<TUser>());
|
mgr.Object.PasswordValidators.Add(new PasswordValidator<TUser>());
|
||||||
return mgr;
|
return mgr;
|
||||||
|
|
@ -76,8 +76,7 @@ namespace Microsoft.AspNet.Identity.Test
|
||||||
var userManager = new UserManager<TUser>(store, options.Object, new PasswordHasher<TUser>(),
|
var userManager = new UserManager<TUser>(store, options.Object, new PasswordHasher<TUser>(),
|
||||||
userValidators, pwdValidators, new UpperInvariantLookupNormalizer(),
|
userValidators, pwdValidators, new UpperInvariantLookupNormalizer(),
|
||||||
new IdentityErrorDescriber(), null,
|
new IdentityErrorDescriber(), null,
|
||||||
new Mock<ILogger<UserManager<TUser>>>().Object,
|
new Mock<ILogger<UserManager<TUser>>>().Object);
|
||||||
null);
|
|
||||||
validator.Setup(v => v.ValidateAsync(userManager, It.IsAny<TUser>()))
|
validator.Setup(v => v.ValidateAsync(userManager, It.IsAny<TUser>()))
|
||||||
.Returns(Task.FromResult(IdentityResult.Success)).Verifiable();
|
.Returns(Task.FromResult(IdentityResult.Success)).Verifiable();
|
||||||
return userManager;
|
return userManager;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue