|
|
|
@ -17,7 +17,6 @@ using MongoDB.Bson; |
|
|
|
using MongoDB.Bson.Serialization; |
|
|
|
using MongoDB.Bson.Serialization.Serializers; |
|
|
|
using MongoDB.Driver; |
|
|
|
using Squidex.Infrastructure; |
|
|
|
using Squidex.Infrastructure.MongoDb; |
|
|
|
using Squidex.Infrastructure.Tasks; |
|
|
|
|
|
|
|
@ -43,7 +42,6 @@ namespace Squidex.Domain.Users.MongoDb |
|
|
|
private const string InternalLoginProvider = "[AspNetUserStore]"; |
|
|
|
private const string AuthenticatorKeyTokenName = "AuthenticatorKey"; |
|
|
|
private const string RecoveryCodeTokenName = "RecoveryCodes"; |
|
|
|
private readonly MongoDbOptions options; |
|
|
|
|
|
|
|
static MongoUserStore() |
|
|
|
{ |
|
|
|
@ -108,11 +106,8 @@ namespace Squidex.Domain.Users.MongoDb |
|
|
|
} |
|
|
|
|
|
|
|
public MongoUserStore(IMongoDatabase database, IOptions<MongoDbOptions> options) |
|
|
|
: base(database) |
|
|
|
: base(database, options) |
|
|
|
{ |
|
|
|
Guard.NotNull(options, nameof(options)); |
|
|
|
|
|
|
|
this.options = options.Value; |
|
|
|
} |
|
|
|
|
|
|
|
protected override string CollectionName() |
|
|
|
@ -120,16 +115,35 @@ namespace Squidex.Domain.Users.MongoDb |
|
|
|
return "Identity_Users"; |
|
|
|
} |
|
|
|
|
|
|
|
protected override string ShardKey() |
|
|
|
{ |
|
|
|
return "Shard"; |
|
|
|
} |
|
|
|
|
|
|
|
protected override Task SetupCollectionAsync(IMongoCollection<MongoUser> collection, CancellationToken ct = default) |
|
|
|
{ |
|
|
|
return collection.Indexes.CreateManyAsync( |
|
|
|
new[] |
|
|
|
{ |
|
|
|
options.IsDocumentDb ? |
|
|
|
Options.IsDocumentDb ? |
|
|
|
new CreateIndexModel<MongoUser>(Index.Ascending("Logins.LoginProvider")) : |
|
|
|
new CreateIndexModel<MongoUser>(Index.Ascending("Logins.LoginProvider").Ascending("Logins.ProviderKey")), |
|
|
|
new CreateIndexModel<MongoUser>(Index.Ascending(x => x.NormalizedUserName), new CreateIndexOptions { Unique = true }), |
|
|
|
new CreateIndexModel<MongoUser>(Index.Ascending(x => x.NormalizedEmail), new CreateIndexOptions { Unique = true }) |
|
|
|
new CreateIndexModel<MongoUser>( |
|
|
|
Index |
|
|
|
.Ascending("Shard") |
|
|
|
.Ascending(x => x.NormalizedUserName), |
|
|
|
new CreateIndexOptions |
|
|
|
{ |
|
|
|
Unique = true |
|
|
|
}), |
|
|
|
new CreateIndexModel<MongoUser>( |
|
|
|
Index |
|
|
|
.Ascending("Shard") |
|
|
|
.Ascending(x => x.NormalizedEmail), |
|
|
|
new CreateIndexOptions |
|
|
|
{ |
|
|
|
Unique = true |
|
|
|
}) |
|
|
|
}, ct); |
|
|
|
} |
|
|
|
|
|
|
|
|