webentwicklung-frage-antwort-db.com.de

ASP.NET Core 2.1-Identität: Entfernen der Standard-Benutzeroberflächen-Rasierer-Seiten

Erweitern der Antwort in dieser Frage: Ändern des Routings in der ASP.NET Core Identity-Benutzeroberfläche?

Javier empfiehlt eine der folgenden Optionen, wenn Sie möchten Passen Sie die URLs an:

  • Verwenden Sie das Gerüstelement der Standardbenutzeroberfläche, und nehmen Sie alle erforderlichen Anpassungen selbst vor. 
  • Verwenden Sie eine Umleitungsregel, die die alten Routen auf die neuen Routen verweist.
  • Verwenden Sie die Standardbenutzeroberfläche überhaupt nicht.

Wie verwenden Sie in einem neuen MVC-Projekt von ASP.NET Core 2.1 mit Authentifizierung: Einzelne Benutzerkonten die Standardbenutzeroberfläche NICHT? Es scheint standardmäßig mit Identity Core installiert zu sein. 

 enter image description here

Wie werden nach dem Erstellen des Projekts die Standard-Benutzeroberflächen-Rasiererseiten entfernt und weiterhin Identity Core verwendet? 

Kann ich einfach den /Identity/-Bereich löschen und stattdessen meine eigene AccountController erstellen?

11
Wellspring

Mit dem von Panagiotis Kanavos verlinkten Artikel konnte ich eine Lösung finden.

In ASP.NET Core 2.1.0-preview1 gab es eine Zeile .AddDefaultUI(), die Sie nicht in Startup.cs einfügen mussten. 

services.AddIdentity<IdentityUser, IdentityRole>(options => options.Stores.MaxLengthForKeys = 128)
    .AddEntityFrameworkStores<ApplicationDbContext>()
    .AddDefaultUI()
    .AddDefaultTokenProviders();

In der endgültigen Release-Version von Core 2.1 wurde derselbe Abschnitt jedoch folgendermaßen vereinfacht:

services.AddDefaultIdentity<IdentityUser>()
    .AddEntityFrameworkStores<ApplicationDbContext>();

Die Lösung, wenn Sie AddDefaultIdentity zurück in AddIdentity ändern, können Sie die Standardeinstellungen überschreiben. I.E. Fügen Sie nicht .AddDefaultUI() hinzu (und richten Sie auch keine Benutzeroberfläche ein), und Sie können Ihre eigene schreiben.

services.AddIdentity<IdentityUser, IdentityRole>(options => options.Stores.MaxLengthForKeys = 128)
    .AddEntityFrameworkStores<ApplicationDbContext>()
    // .AddDefaultUI()
    .AddDefaultTokenProviders();

Dann denke ich, dass es sicher ist, den /Areas/Identity/-Ordner zu löschen, aber ich bin nicht 100%

Update:

Ich habe meine Antwort auf Details der endgültigen Lösung, mit der ich endete, bereinigt, um die Standard-Rasierer-Seiten für die Benutzeroberfläche zu entfernen, die mit ASP.NET Core 2.1 geliefert werden und stattdessen MVC verwenden.

1) In Startup.cs 

    public void ConfigureServices(IServiceCollection services)
    {
        // Unrelated stuff commented out...

        // BEGIN: Identity Setup (Overrides default identity)
        services.AddIdentity<ApplicationUser, IdentityRole>(options => options.Stores.MaxLengthForKeys = 128)
            .AddEntityFrameworkStores<ApplicationDbContext>()
            .AddDefaultTokenProviders();
        // END: Identity Setup

        services.Configure<IdentityOptions>(options =>
        {
            // Set your identity Settings here (password length, etc.)
        });

        // More unrelated stuff commented out...

        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

        // Added after AddMvc()
        services.ConfigureApplicationCookie(options =>
        {
            options.LoginPath = $"/account/login";
            options.LogoutPath = $"/account/logout";
            options.AccessDeniedPath = $"/account/access-denied";
        });

        // More unrelated stuff commented out...
    }

Ersetzen Sie natürlich ApplicationUser und IdentityRole ggf. durch Ihre eigenen Klassen.

2) Löschen Sie den Area-Ordner für Identity, der standardmäßig in Ihrem ASP.NET Core 2.1-Projekt enthalten war.

3) Erstellen Sie ein neues separates ASP.NET Core 2.0-Projekt (nicht "2.1"), wobei Individual User Account-Authentifizierung im Projekterstellungsfenster ausgewählt ist. 

4) Kopieren Sie AccountController und ManageController mit den entsprechenden ViewModels und Views aus dem 2.0-Projekt in Ihr ASP.NET Core 2.1-Projekt.

Auf diese Weise bin ich bisher noch nicht auf Probleme gestoßen. 

7
Wellspring

Ich habe die erste Antwort angehört, weil sie 90 Prozent dort hatte, den Rest ausgeben wollte (es war ein bisschen zu lang, um sie in die Kommentare einzufügen). Sie sollten also den Ordner/Areas/Identity/behalten, da er auf Ihren freigegebenen Ordner verweist, wenn Sie den Header der Standardvorlage verwenden. Wenn dies nicht der Fall ist, löschen Sie ihn. Das Backend verweist weiterhin auf Identity/Account/Register/. Erstellen Sie daher einen Controller mit dem Namen Account, und erstellen Sie einen Ordner in Ansichten mit dem Namen Account, und geben Sie den Register.cshtml ein. Ich habe die ursprüngliche HTML aus einem Debugger-Fenster genommen, das Sie als Vorlage zum Anpassen verwenden können. In Register.cshtml einfügen:

<div class="container body-content">


<h2>Register</h2>

<div class="row">
    <div class="col-md-4">
        <form method="post" action="/Identity/Account/Register" novalidate="novalidate">
            <h4>Create a new account.</h4>
            <hr>
            <div class="text-danger validation-summary-valid" data-valmsg-summary="true"><ul><li style="display:none"></li>
</ul></div>
            <div class="form-group">
                <label for="Input_Email">Email</label>
                <input class="form-control" type="email" data-val="true" data-val-email="The Email field is not a valid e-mail address." data-val-required="The Email field is required." id="Input_Email" name="Input.Email" value="">
                <span class="text-danger field-validation-valid" data-valmsg-for="Input.Email" data-valmsg-replace="true"></span>
            </div>
            <div class="form-group">
                <label for="Input_Password">Password</label>
                <input class="form-control" type="password" data-val="true" data-val-length="The Password must be at least 6 and at max 100 characters long." data-val-length-max="100" data-val-length-min="6" data-val-required="The Password field is required." id="Input_Password" name="Input.Password">
                <span class="text-danger field-validation-valid" data-valmsg-for="Input.Password" data-valmsg-replace="true"></span>
            </div>
            <div class="form-group">
                <label for="Input_ConfirmPassword">Confirm password</label>
                <input class="form-control" type="password" data-val="true" data-val-equalto="The password and confirmation password do not match." data-val-equalto-other="*.Password" id="Input_ConfirmPassword" name="Input.ConfirmPassword">
                <span class="text-danger field-validation-valid" data-valmsg-for="Input.ConfirmPassword" data-valmsg-replace="true"></span>
            </div>
            <button type="submit" class="btn btn-default">Register</button>
        <input name="__RequestVerificationToken" type="hidden" value="CfDJ8IWbPHM_NTJDv_7HGewWzbbRveP09yQOznYdTWL2aN5X_4_eVbNE1w8D_qz7zegloVtdAhuVOJbJLQo0ja73FB3PgYycyGpn-DfX3fJqv4Cx8ns6Ygh6M7nMxV0eozO7hoDxUfPwrIJb2RcFtyzhPpMevZ4P0M8aVyBP55SP-5C4l23dCtDXXUOAY_YLwt67dw"></form>
    </div>
</div>


        <hr>
        <footer>
            <p>© 2018 - SqlServerApp</p>
        </footer>
    </div> 

Wie die andere Antwort sagt, ändern Sie Startup:

services.AddIdentity<IdentityUser, IdentityRole>(options => options.Stores.MaxLengthForKeys = 128)
    .AddEntityFrameworkStores<ApplicationDbContext>()
    // .AddDefaultUI()
    .AddDefaultTokenProviders();

Außerdem muss die Route zu Ihrem Controller erstellt werden, dieselbe Startup.cs-Datei. Die andere Route, die dort enthalten ist, sollte wahrscheinlich zuerst beibehalten werden, wenn ich darüber nachdenke, da sie nacheinander geprüft wird: 

app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "identity",
                template: "Identity/{controller=Account}/{action=Register}/{id?}");
1
Ryan Dines

Ein bisschen spät, aber es ist viel einfacher, dies zu tun. Sie können ein neues Gerüst hinzufügen, um alles zu überschreiben. Diesen Artikel ansehen Linkbeschreibung hier eingeben

0
hivie7510