Skip to content

User and Role ID should not have to be the same type #122

@Lukejkw

Description

@Lukejkw

Is your feature request related to a problem? Please describe.
We use value objects for the key IDs of our user and role objects. However, registration requires these values to be the same type when making a call to AddIdentityMongoDbProvider

Describe the solution you'd like

It would be nice to be able to define the key types for the user and role separately rather than forcing them to be the same type.

 builder.Services
            .AddAuthorization()
            .AddIdentityMongoDbProvider<ApplicationUser, ApplicationRole, UserId>( // <--- It would be nice to be able to specify the ID types for user and role separately
                identityOptions => { identityOptions.SignIn.RequireConfirmedAccount = false; },
                mongoIdentityOptions =>
                {
                    mongoIdentityOptions.ConnectionString = builder.Configuration.GetConnectionString("MongoDB");
                })
            .AddDefaultTokenProviders();

Describe alternatives you've considered

The alternative would be use the underlying type such as a Guid. However, you lose the strong typing of the value object. I'm also not sure registering a Guid serialiser for a nice readable guid currently works.

Example:

builder.Services
            .AddAuthorization()
            .AddIdentityMongoDbProvider<ApplicationUser, ApplicationRole, Guid>(
                identityOptions => { identityOptions.SignIn.RequireConfirmedAccount = false; },
                mongoIdentityOptions =>
                {
                    mongoIdentityOptions.ConnectionString = builder.Configuration.GetConnectionString("MongoDB");
                })
            .AddDefaultTokenProviders();
            
BsonSerializer.RegisterSerializer(new GuidSerializer(BsonType.String));

Metadata

Metadata

Assignees

Labels

questionFurther information is requested

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions