web-dev-qa-db-fra.com

Comment résoudre "Impossible de résoudre le service pour le type" Microsoft.aspnetcore.entity.usermanager "?

Client MVC: Identité ASP.NET CORE 3 (avec identité érafaudée). Identity Server 4 (v3).

Créé par QuickStart .

Le démarrage du client MVC a:

services.AddIdentity<ApplicationUser, IdentityRole>()
    .AddEntityFrameworkStores<ApplicationDbContext>()
    .AddDefaultTokenProviders();

Addentifity aide-moi à enregistrer un nouvel utilisateur.

Lorsque j'essaie de connecter le client MVC avec Identity Server, je reçois une boucle infinie. I Lecture , qui doit supprimer l'addition, car mon client se connecte à ID Server. Quand je supprime l'addentité, une connexion fonctionne parfaitement.

Mais mon client MVC a une identité échafaudeuse pour l'enregistrement de l'utilisateur. Lorsque j'essaie d'essayer un formulaire d'enregistrement d'utilisateur ouvert ( http: // localhost: 5002/identité/compte/registre ), je reçois une erreur:

InvalidOperationException: Unable to resolve service for type 'Microsoft.AspNetCore.Identity.UserManager`1[SharedIdentity.Models.ApplicationUser]' while attempting to activate 'UserRegistration.Areas.Identity.Pages.Account.RegisterModel'.

Lorsque j'essaie de vous inscrire sans identité Usermanager:

 services.AddScoped<UserManager<ApplicationUser>>();
 services.AddScoped<SignInManager<ApplicationUser>>();

Je reçois une autre erreur:

Unhandled exception. System.AggregateException: Some services are not able to be constructed 
(Error while validating the service descriptor 'ServiceType: 
Microsoft.AspNetCore.Identity.UserManager`1[SharedIdentity.Models.ApplicationUser] 
Lifetime: Scoped ImplementationType: Microsoft.AspNetCore.Identity.UserManager`1[SharedIdentity.Models.ApplicationUser]': 
Unable to resolve service for type 'Microsoft.AspNetCore.Identity.IUserStore`1[SharedIdentity.Models.ApplicationUser]' while attempting to activate 'Microsoft.AspNetCore.Identity.UserManager`1[SharedIdentity.Models.ApplicationUser]'.) 
(Error while validating the service descriptor 'ServiceType: Microsoft.AspNetCore.Identity.SignInManager`1[SharedIdentity.Models.ApplicationUser] Lifetime: Scoped ImplementationType: Microsoft.AspNetCore.Identity.SignInManager`1[SharedIdentity.Models.ApplicationUser]': Unable to resolve service for type 'Microsoft.AspNetCore.Identity.IUserStore`1[SharedIdentity.Models.ApplicationUser]' 
while attempting to activate 'Microsoft.AspNetCore.Identity.UserManager`1[SharedIdentity.Models.ApplicationUser]'.)
 ---> System.InvalidOperationException: Error while validating the service descriptor 'ServiceType: Microsoft.AspNetCore.Identity.UserManager`1[SharedIdentity.Models.ApplicationUser] Lifetime: Scoped ImplementationType: Microsoft.AspNetCore.Identity.UserManager`1[SharedIdentity.Models.ApplicationUser]': 

Unable to resolve service for type 'Microsoft.AspNetCore.Identity.IUserStore`1[SharedIdentity.Models.ApplicationUser]' while attempting to activate 'Microsoft.AspNetCore.Identity.UserManager`1[SharedIdentity.Models.ApplicationUser]'.
 ---> System.InvalidOperationException: Unable to resolve service for type 'Microsoft.AspNetCore.Identity.IUserStore`1[SharedIdentity.Models.ApplicationUser]' while attempting to activate 'Microsoft.AspNetCore.Identity.UserManager`1[SharedIdentity.Models.ApplicationUser]'.

......
System.InvalidOperationException: Unable to resolve service for type 'Microsoft.AspNetCore.Identity.IUserStore`1[SharedIdentity.Models.ApplicationUser]' while attempting to activate 'Microsoft.AspNetCore.Identity.UserManager`1[SharedIdentity.Models.ApplicationUser]'.
   at

Peut-être que je suis sur la mauvaise façon? J'ai besoin que mon client MVC puisse enregistrer les utilisateurs et peut identifier les utilisateurs avec Identity Server.

3
hdoitc

Cela ne répond pas à la question comme dans " résolvez le problème ". Mais il répond à la question de la mise en place de la gestion des utilisateurs et semble être une réponse acceptable pour @HDOITC:

Tout d'abord, Un client n'aurait pas dû accéder au modèle d'identité . Ceci est la responsabilité d'ItalyServer. Les mêmes comptes pour la connexion. L'utilisateur ne se connecte pas sur le site Web du client, mais sur le site Web ItalyServer. En ce qui concerne l'enregistrement, l'utilisateur est enregistré dans ItalyServer non dans le client.

IdentityServer authentifie l'utilisateur et autorise le client. Vous devrez donc envoyer l'utilisateur au site Web ItalyServer pour la connexion et l'inscription. Considérez un utilisateur en tant qu'entité qui n'est pas lié à un client. Avec son compte, il peut utiliser n'importe quel client, à moins que l'autorisation ne soit refusée, bien que ItalyServer soit non recommandé pour l'autorisation de l'utilisateur:

PolicyServer est notre recommandation pour l'autorisation de l'utilisateur.

Si vous êtes intéressé, voici un lien.

Par défaut, il n'y a pas beaucoup d'interface utilisateur pour l'identité, car identitéServer est en réalité non sur la gestion de l'utilisateur. Mais il y a un peu support pour l'identité ASP.NET .

Vous pouvez ajouter des vues de toute façon que vous aimez, car il s'agit d'une identité ASP.NET. Je vous suggère de créer un nouveau projet et échafauder l'identité Fichiers documentés ici et utilisez tout ce dont vous avez besoin, ou jetez un coup d'œil sur les sources ici . Si je ne me trompe pas, il y a une interface utilisateur pour des razorpages, mais pas pour MVC.

Vous pouvez améliorer l'expérience utilisateur de ItalyServer en personnalisant les points de vue, par exemple. Ajoutez un logo, utilisez un thème en identifiant le client par le clientide.

3
Ruard van Elburg