J'ai un projet d'authentification que j'aimerais réutiliser.Comment puis-je faire abstraction du type dépendant du projet de base de base C# en utilisant le cadre d'identité de Microsoft?
J'ai un projet AspNetCore Identity appelé authentification qui est destiné à être un projet d'authentification réutilisable. Si vous avez examiné l'implémentation d'AspNetCore Identity, vous verrez un type appelé UserManager dans lequel l'utilisateur de l'application est la classe dans laquelle vous stockez votre implémentation de l'utilisateur dans la table de base de données AspNetUsers.
public class ApplicationUser : IdentityUser
{
}
Le problème que j'ai est qu'il ya un contrôleur dans ce projet d'authentification isolé appelé AccountController qui détient toute la connexion/déconnexion, l'enregistrement, et d'autres actions de compte connexes. Je souhaite extraire l'utilisateur de l'application de la classe de ce projet afin que je puisse le modifier en fonction des besoins du projet pour des solutions multiples.
Le projet d'authentification a une classe de démarrage qui est initiée comme suit à l'intérieur du projet dans lequel il est utilisé:
authenticationStartUp.ConfigureServices<ApplicationUser, MyDatabase>
(services, Configuration);
Comme vous pouvez le voir, le projet abonnée ajoute sa propre mise en œuvre du ApplicationUser. Ensuite, vient la configuration de l'identité qui fait référence à TApplicationUser dans l'appel services.AddIdentity. Malheureusement, ceci se décompose maintenant dans le AccountController qui utilise le service injecté. Comment, le TApplicationUser peut-il être ajouté au contrôleur.
public class AccountController : Controller
{
private readonly UserManager<TApplicationUser> _userManager;
public AccountController(UserManager<TApplicationUser> userManager)
{
_userManager = userManager;
}
}
Ceci est évidemment brisé car il n'y a pas d'utilitaire d'application TApplication. De plus, si j'ajoute le TApplicationUser comme suit, le contrôleur n'est plus résolu et rien ne se passe.
public class AccountController<TApplicationUser> : Controller
where TApplicationUser : IdentityUser
{
private readonly UserManager<TApplicationUser> _userManager;
public AccountController(UserManager<TApplicationUser> userManager)
{
_userManager = userManager;
}
}
est-il de toute façon à obtenir contrôleur d'application à toujours résolu avec les paramètres de type inclus?
Et aussi, j'ai trouvé un autre problème en ce que même si j'ajoute le paramètre de type dans la classe de base comment serai-je capable d'ajouter le paramètre de type dans les vues qui utilisent TApplicationUser. Voici un exemple
vue intégrée dans le projet d'authentification
@* TApplicationUser obviously doesn't resolve *@
@inject SignInManager<TApplicationUser> SignInManager
@{
var loginProviders = SignInManager.GetExternalAuthenticationSchemes().ToList();
if (loginProviders.Count == 0)
{
<div>
<p>
There are no external authentication services configured. See <a href="https://go.microsoft.com/fwlink/?LinkID=532715">this article</a>
for details on setting up this ASP.NET application to support logging in via external services.
</p>
</div>
}
else
{
<form asp-controller="Account" asp-action="ExternalLogin" asp-route-returnurl="@ViewData["ReturnUrl"]" method="post" class="form-horizontal">
<div>
<p>
@foreach (var provider in loginProviders)
{
<button type="submit" class="btn btn-default" name="provider" value="@provider.AuthenticationScheme" title="Log in using your @provider.DisplayName account">@provider.AuthenticationScheme</button>
}
</p>
</div>
</form>
}
}
Avoir le contrôleur générique en tant que contrôleur de base – Nkosi
Et que dois-je transmettre en tant que paramètre de type basecontroller? – jwize
L'utilisateur de l'application du projet utilisant – Nkosi