Umbraco 8: Έλεγχος ταυτότητας και εξουσιοδότηση

31
Umbraco 8: Έλεγχος ταυτότητας και εξουσιοδότηση

Χειρισμός χρήστη και ασφάλεια

Στην τελευταία δόση, μάθαμε για τα διάφορα είδη ελεγκτών που μας παρέχει η Umbraco. Τώρα θα εμβαθύνουμε στη διαχείριση χρηστών και μελών και πώς να κωδικοποιήσετε τον έλεγχο ταυτότητας και την εξουσιοδότηση στον ιστότοπό σας Umbraco.

Ασφάλεια

Η Umbraco έχει δύο διαφορετικούς τύπους χρηστών. Ασφάλεια χρήστη για το back office και ασφάλεια μελών για το μπροστινό μέρος. Και τα δύο είναι αρκετά εύκολο στη χρήση και βασίζονται στον Έλεγχο ταυτότητας με φόρμες. Ένα από τα σπουδαία πράγματα για το Umbraco είναι η ευελιξία του. Είτε για χρήστες είτε για μέλη, μπορείτε να χρησιμοποιήσετε διαφορετικό πάροχο από τον Έλεγχο ταυτότητας με φόρμες ή μπορείτε ακόμη και να δημιουργήσετε το δικό σας. Ο έλεγχος ταυτότητας χρήστη λειτουργεί αμέσως χωρίς να χρειάζεται να κάνετε καμία πραγματική εργασία, αλλά ο έλεγχος ταυτότητας και η εξουσιοδότηση μέλους θα απαιτήσουν λίγη προσαρμοσμένη κωδικοποίηση από την πλευρά σας.

Ασφάλιση του Backoffice

Δεν πρόκειται να μιλήσω πολύ για την ασφάλεια του back office γιατί αυτό είναι το κύριο θέμα του επόμενου άρθρου μου, αλλά θα δώσω μια βασική επισκόπηση. Ο έλεγχος ταυτότητας και η εξουσιοδότηση back office της Umbraco βασίζεται στο ASP.Net Identity, το οποίο οι περισσότεροι από εμάς θα πρέπει να γνωρίζουμε αρκετά σε αυτό το σημείο. Το ότι βασίζεται στο Identity σημαίνει ότι μπορεί να υποστηρίξει οποιονδήποτε πάροχο OAuth που θα του επιτρέψετε. Υπάρχει ένα σημαντικό πράγμα που πρέπει να σημειωθεί. Η Umbraco κυκλοφόρησε ένα έργο github που ονομάζεται UmbracoIdentityExtensions, και έχω δοκιμάσει να δουλέψω με αυτό στο v8 και είναι μάλλον προβληματικό σε αυτό το σημείο. Είμαι σίγουρος ότι θα κυκλοφορήσουν κάτι άλλο στην πορεία.

Ασφάλιση του Frontend

Η ασφάλεια του Frontend στο Umbraco είναι απλή και μπορεί να χρησιμοποιηθεί με όποιον τρόπο θέλετε. Η Umbraco το κάνει πραγματικά πολύ της άρσης βαρέων για εσάς! Θα το κρατήσω όσο πιο απλό γίνεται σε αυτό το σεμινάριο.

Θα χρειαστεί να κάνουμε πρώτα τα εξής:

  • Δημιουργήστε μια σελίδα σύνδεσης.
  • Δημιουργήστε μια σελίδα εγγραφής.
  • Δημιουργήστε μια σελίδα σφάλματος ελέγχου ταυτότητας για όταν ο χρήστης αποτυγχάνει να ελέγξει σωστά την ταυτότητα ή δεν έχει επαρκή δικαιώματα.
  • Δημιουργήστε μερικές ασφαλείς σελίδες που είναι προσβάσιμες μόνο σε συγκεκριμένους τύπους χρηστών.

Πιστεύω ότι ο κώδικας γίνεται όσο το δυνατόν πιο αρθρωτός, επομένως η σελίδα σύνδεσης θα είναι απλώς του τύπου εγγράφου „Απλή σελίδα“ και θα δημιουργήσουμε μια μακροεντολή σύνδεσης.

Λοιπόν, ας ξεκινήσουμε:

  • Συνδεθείτε στο Umbraco Backoffice
  • Τώρα πρέπει να δημιουργήσουμε τις ομάδες μελών μας. κάντε κλικ στο Μέλη, κάντε δεξί κλικ στις Ομάδες μελών και κάντε κλικ στο Δημιουργία, τώρα απλά πληκτρολογήστε Διαχειριστής και κάντε κλικ στην Αποθήκευση.
  • Ακολουθήστε τα ίδια βήματα από πάνω και δημιουργήστε μια Ομάδα μελών που ονομάζεται Standard.
  • Κάντε δεξί κλικ στην Αρχική σελίδα και δημιουργήστε τις ακόλουθες σελίδες και βάλτε ό,τι περιεχόμενο σας αρέσει αυτή τη στιγμή:
    1. Διαχείριση
    2. Ο λογαριασμός μου
    3. Σύνδεση
    4. AuthError
  • Τώρα κάντε κλικ στο Administration, κάντε κλικ στο Actions, κάντε κλικ στο Public Access
    1. Για Επιλέξτε τις ομάδες που έχουν πρόσβαση στη σελίδα Διαχείριση, κάντε κλικ στο Προσθήκη και επιλέξτε την ομάδα Διαχειριστή που δημιουργήθηκε πρόσφατα.
    2. Για Σελίδα σύνδεσης επιλέξτε τη σελίδα σύνδεσης που δημιουργήσατε παραπάνω.
    3. Για Σελίδα σφάλματος επιλέξτε τη σελίδα AuthError που δημιουργήσατε παραπάνω.
    4. Κάντε κλικ στην Αποθήκευση
  • Τώρα κάντε κλικ στο Λογαριασμός μου, κάντε κλικ στο Ενέργειες, κάντε κλικ στο Δημόσια πρόσβαση
    1. Για Επιλέξτε τις ομάδες που έχουν πρόσβαση στη σελίδα Διαχείριση, κάντε κλικ στο Προσθήκη και επιλέξτε την ομάδα Διαχειριστή που δημιουργήθηκε πρόσφατα και, στη συνέχεια, προσθέστε το Standard.
    2. Για Σελίδα σύνδεσης επιλέξτε τη σελίδα σύνδεσης που δημιουργήσατε παραπάνω.
    3. Για Σελίδα σφάλματος επιλέξτε τη σελίδα AuthError που δημιουργήσατε παραπάνω.
    4. Κάντε κλικ στην Αποθήκευση.
  • Ρίξτε μια ματιά στο site μας τώρα…

  • Φαίνεται ότι η μακροεντολή και ο τύπος εγγράφου μας δεν είναι αρκετά έξυπνοι για να καταλάβουν μαγικά πότε δεν πρέπει να εμφανίζεται μια σελίδα που δημιουργήσαμε. Ο προγραμματιστής αυτού του ιστότοπου πρέπει να πυροβοληθεί! Ω, περίμενε… δεν πειράζει. Ολοι κάνουν λάθη. Ας σκοτώσουμε δύο πουλιά με μια πέτρα, ενημερώνοντας αυτήν τη μακροεντολή αυτή τη στιγμή για να εμφανιστεί έξυπνα ένα κουμπί σύνδεσης ή αποσύνδεσης. και θα συζητήσουμε γρήγορα πώς να αποκρύψετε σελίδες που δεν θέλετε στο μενού πλοήγησης. Έτσι, εάν κάνετε κλικ στη σελίδα Διαχείριση ή Ο Λογαριασμός μου, θα δείτε ότι σας ανακατευθύνει στην εντελώς άχρηστη προς το παρόν σελίδα Σύνδεσής μας. Ας προχωρήσουμε και ας το διορθώσουμε.
  • Πρώτα ας επιστρέψουμε στο backoffice, πηγαίνουμε στις ρυθμίσεις, κάνουμε κλικ στο Document Types, επιλέγουμε Simple Page και κάνουμε κλικ στο Add ιδιοκτησία με τις ακόλουθες ιδιότητες:
    Όνομα: Απόκρυψη από το μενού πλοήγησης
  • Κάντε κλικ στην Προσθήκη επεξεργαστή και, στη συνέχεια, επιλέξτε Πλαίσιο ελέγχου, αποδεχτείτε τις προεπιλεγμένες τιμές και κάντε κλικ στην Υποβολή.
  • Κάντε κλικ στην Αποθήκευση.
  • Κάντε κλικ στο Περιεχόμενο, κάντε κλικ στο Σφάλμα ελέγχου ταυτότητας, κάντε κλικ στην επιλογή „Απόκρυψη από το μενού πλοήγησης“ και κάντε κλικ στην επιλογή Αποθήκευση και δημοσίευση.
  • Κάντε το ίδιο πράγμα για το Login
  • Αρχικά, ας ασχοληθούμε με αυτά τα ενοχλητικά παράξενα στοιχεία στο θέμα του μενού πλοήγησης. Για να διορθωθεί αυτό… το μόνο που χρειάζεται να κάνουμε είναι να αναφερθούμε στην ιδιότητά μας που δημιουργήθηκε πρόσφατα στο τμήμα ~/Views/MacroPartials/Navigation.cshtml, όπως:

@inherits Umbraco.Web.Macros.PartialViewMacroPage
@using Umbraco.Web
@{ var selection = Model.Content.Root().Children.Where(x => x.IsVisible() && (bool)x.GetProperty("hideFromNavigationMenu").Value() == false).ToArray(); }
<div class="collapse navbar-collapse" id="navbarsExampleDefault">
<ul class="navbar-nav mr-auto">
<li class="nav-item" @(Model.Content.Root().IsAncestorOrSelf(Model.Content) ? "active" : null)>
<a class="nav-link" href="https://uniquesoftwaredev.com/umbraco-8-authentication-authorization/@Model.Content.Root().Url">@Model.Content.Root().Name</a>
</li>
@if (selection.Length > 0)
{
foreach (var item in selection)
{
<li class="nav-item @(item.IsAncestorOrSelf(Model.Content) ? "active" : null)">
<a class="nav-link" href="https://uniquesoftwaredev.com/umbraco-8-authentication-authorization/@item.Url">@item.Name</a>
</li>
}
}
</ul>
</div>

Ξέρω ότι ένας μάγος δεν αποκαλύπτει ποτέ τα μυστικά του, αλλά η πραγματική μαγεία συμβαίνει εδώ:
@{ var selection = Model.Content.Root().Children.Where(x => x.IsVisible() && (bool)x.GetProperty("hideFromNavigationMenu").Value() == false).ToArray(); }

  • Τώρα που τελειώσαμε, θα προχωρήσουμε και θα δημιουργήσουμε αυτήν την προσαρμοσμένη κεφαλίδα σύνδεσης για το μενού πλοήγησης. Προς το παρόν, θα ανησυχούμε μόνο για το πότε ο χρήστης δεν είναι συνδεδεμένος. Ξεκινήστε δημιουργώντας μια μερική προβολή στον κατάλογο ~/Views/Partials που ονομάζεται _LoginHeader.
  • Αυτό θα είναι ένα πολύ απλό μέρος όπου απλά εμφανίζετε έναν διαφορετικό σύνδεσμο εάν ένας χρήστης είναι συνδεδεμένος ή όχι και θα μοιάζει με αυτό:

@inherits Umbraco.Web.Mvc.UmbracoViewPage<Umbraco.Web.Models.PartialViewMacroModel>
<div class="my-2 my-lg-0">
@if (Umbraco.MemberIsLoggedOn())
{
<text>
<ul class="nav navbar-nav">
<li class="nav-item navbar-text">
Welcome, @Umbraco.Member(Umbraco.MembershipHelper.GetCurrentMemberId()).Name
</li>
<li class="nav-item">
<a class="nav-link" href="https://uniquesoftwaredev.com/Umbraco/Surface/Authentication/Logout">Logout</a>
</li>
</ul>
</text>
}
else
{
<text>
<ul class="nav navbar-nav">
<li class="nav-item">
<a class="nav-link" href="https://uniquesoftwaredev.com/login">Login</a>
</li>
<li class="nav-item">
<a class="nav-link" href="https://uniquesoftwaredev.com/register">Register</a>
</li>
</ul>
</text>
}
</div>

  • Τώρα πρέπει απλώς να προσθέσουμε τη μερική μακροεντολή στο μενού πλοήγησής μας (~/Views/MacroPartials/Navigation.cshtml). Μπορείτε να το κάνετε αυτό προσθέτοντας απλώς την ακόλουθη γραμμή πριν το κλείσιμο div της γραμμής πλοήγησής σας:
    @Html.Partial(@”~/Views/Partials/_LoginHeader.cshtml”)
  • Τέλος, για να δημιουργήσετε τη σελίδα σύνδεσης. Για αυτό, πρόκειται να δημιουργήσουμε ένα νέο μοντέλο, έναν ελεγκτή ελέγχου ταυτότητας και μια μακροεντολή. Ας ξεκινήσουμε με το μοντέλο. Προχωρήστε και δημιουργήστε μια κλάση που ονομάζεται LoginViewModel.cs στον κατάλογο ~/Models. Ο κώδικας που γράφετε θα πρέπει να μοιάζει κάπως έτσι, αλλά μη διστάσετε να παίξετε μαζί του:

using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
namespace USD.Umbraco.Article3.UI.Models
{
public class LoginViewModel
{
public LoginViewModel(string username, string password, string returnUrl)
{
Username = username;
Password = password;
ReturnUrl = returnUrl;
}
public LoginViewModel()
{
}
[Required]
[DisplayName("Email Address")]
[DataType(DataType.EmailAddress)]
public string Username { get; set; }
[Required]
[DisplayName("Password")]
[DataType(DataType.Password)]
public string Password { get; set; }
[DataType(DataType.Url)]
public string ReturnUrl { get; set; }
}
}

  • Τώρα χρειάζεται απλώς να προσθέσουμε μεθόδους σύνδεσης και αποσύνδεσης στο AuthenticationController.cs και να δημιουργήσουμε την προβολή σύνδεσης. Δεν θα ανησυχούμε για τη δημιουργία μιας σελίδας αποσύνδεσης, απλά θα σας δείξω πώς να κάνετε μια ενέργεια χωρίς η Umbraco να παρεμποδίζει και να προσπαθεί να εμφανίσει μια σελίδα (πολύ απλό, αλλά η τεκμηρίωση δεν κάνει αυτό είναι προφανές).

Ακολουθεί η εμφάνιση του κωδικού ελεγκτή σας:

using System;
using System.Web.Mvc;
using System.Web.Security;
using Umbraco.Web.Mvc;
using USD.Umbraco.Article3.UI.Models;
namespace USD.Umbraco.Article3.UI.Controllers
{
public class AuthenticationController : SurfaceController
{
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginViewModel model)
{
if (ModelState.IsValid)
{
if (Membership.ValidateUser(model.Username, model.Password))
{
FormsAuthentication.SetAuthCookie(model.Username, false); // set to true for "remember me."
Redirect(model.ReturnUrl.IndexOf(@"login", StringComparison.InvariantCulture) > 0 ? "/" : model.ReturnUrl);
}
else
{
this. ModelState.AddModelError(String.Empty, @"Invalid Username or password.");
}
}
return CurrentUmbracoPage();
}
[HttpGet]
public void Logout()
{
FormsAuthentication.SignOut();
Response.Redirect(@"/", true);
}
}
}

Τώρα για τη θέα. Για λόγους αρθρωτής και απλότητας, ας δημιουργήσουμε ένα κανονικό μερικό MVC που ονομάζεται _Login.cshtml στον κατάλογο ~/Views/Partials και ας το κωδικοποιήσουμε ως εξής:

@inherits Umbraco.Web.Mvc.UmbracoViewPage<USD.Umbraco.Article3.UI.Models.LoginViewModel>
<div class="container">
@using (Html.BeginUmbracoForm(
@"Login",
@"Authentication",
System.Web.Mvc.FormMethod.Post,
new { id = "loginForm" }))
{
@Html.AntiForgeryToken()
<input type="hidden" name="ReturnUrl" value="@this.Request.RawUrl" />
<div class="row">
<div class="col-md-3">
<div class="form-group">
@Html.LabelFor(m => m.Username)
</div>
</div>
<div class="col-md-3">
<div class="form-group">
@Html.TextBoxFor(m => m.Username, new { placeholder = "Username", @class="form-control" })
@Html.ValidationMessageFor(m => m.Username)
</div>
</div>
</div>
<div class="row">
<div class="col-md-3">
<div class="form-group">
@Html.LabelFor(m => m.Password)
</div>
</div>
<div class="col-md-3">
<div class="form-group">
@Html.PasswordFor(m => m.Password, new { placeholder = "Password", @class = "form-control" })
@Html.ValidationMessageFor(m => m.Username)
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<button name="login" id="login" type="submit" class="btn btn-primary">Login</button>
</div>
</div>
}
</div>

  • Για άλλη μια φορά, για να διατηρήσουμε αυτό το αρθρωτό, θα δημιουργήσουμε μια μακροεντολή για αυτό, οπότε συνδεθείτε στο back office και μεταβείτε στην καρτέλα ρυθμίσεων, κάντε δεξί κλικ στο Partial View Macro Files και κάντε κλικ στο New Partial View Macro. Ας το ονομάσουμε αυτό Σύνδεση και χρησιμοποιήστε τον ακόλουθο κωδικό:

@inherits Umbraco.Web.Macros.PartialViewMacroPage
@Html.Partial(@"~/Views/Partials/_Login.cshtml", new USD.Umbraco.Article3.UI.Models.LoginViewModel(string.Empty, string.Empty, this.Url.ToString()))

Οι μακροεντολές δεν σας επιτρέπουν να περνάτε σε μοντέλα, μόνο οι παράμετροι Umbraco.

  • Σε αυτό το σημείο, θα πρέπει να μπορείτε να συνδεθείτε. Μην ξεχάσετε να δημιουργήσετε ένα μέλος στο back office. Η πρόσβαση στη σελίδα γίνεται αυτόματα από την Umbraco, η οποία ακολουθεί τους κανόνες που ορίσαμε προηγουμένως.

  • Εάν έχετε συνδεθεί, αποσυνδεθείτε και δοκιμάστε να συνδεθείτε ξανά χωρίς όνομα χρήστη ή κωδικό πρόσβασης. Θα παρατηρήσετε ότι παρακάμπτει πλήρως τους κανόνες επικύρωσης που καθορίζονται στο μοντέλο. Αυτό συμβαίνει επειδή δεν έχουμε εγκαταστήσει διακριτικό ajax και πρέπει να κάνουμε μερικές αλλαγές στο αρχείο web.config.
  • Αρχικά, ας εγκαταστήσουμε τα απαραίτητα αρχεία javascript. Πληκτρολογήστε τις ακόλουθες δύο εντολές στο Package Manager Console:
    • Install-Package jQuery.Validation
    • Install-Package Microsoft.jQuery.Unobtrusive.Validation
  • Τώρα, θα χρειαστεί να ενημερώσουμε το ~/Views/Master.cshtml. Προσθέστε τον παρακάτω κώδικα μετά το βασικό σενάριο jquery:
    <script src="https://uniquesoftwaredev.com/umbraco-8-authentication-authorization/~/Scripts/jquery.validate.js"></script>

<script src="https://uniquesoftwaredev.com/umbraco-8-authentication-authorization/~/Scripts/jquery.validate.unobtrusive.js"></script>

  • Θα νομίζατε ότι θα λειτουργούσε τώρα… λάθος. 😒Πρέπει να προσθέσετε τις ακόλουθες γραμμές στο αρχείο web.config:
    1. <add key="ClientValidationEnabled" value="true"/>
    2. <add key="UnobtrusiveJavaScriptEnabled" value="true"/>

Αυτό είναι κάτι που με μπέρδεψε αρχικά. Αυτές οι δύο γραμμές είχαν ήδη συμπεριληφθεί σε προηγούμενες εκδόσεις του Umbraco. Ορίστηκαν ως ψευδείς, αλλά συμπεριλήφθηκαν.

  • Voila! Όπως ακριβώς και οι ρυθμίσεις επικύρωσης που καθορίζετε στα μοντέλα σας θα επιβάλλονται στο περιβάλλον χρήστη.
  • Τώρα, αρκεί να κάνουμε τη σελίδα εγγραφής μέλους και μπορούμε να ονομάσουμε αυτό το μάθημα αναδίπλωση. Αρχικά, θα δημιουργήσουμε ξανά μια νέα μακροεντολή. Έτσι, για άλλη μια φορά, μεταβείτε στο back office, μεταβείτε στις ρυθμίσεις, κάντε δεξί κλικ σε μερική προβολή αρχείων μακροεντολών και δημιουργήστε ένα νέο που ονομάζεται RegisterForm αφήστε το κενό προς το παρόν και κάντε κλικ στην αποθήκευση (επειδή προτιμώ να εργάζομαι στο Visual Studio – μην Μην ξεχάσετε σε λίγα λεπτά να εμφανίσετε όλα τα αρχεία και να τα συμπεριλάβετε στο έργο).
  • Τώρα μεταβείτε στις Μακροεντολές, κάντε κλικ στο RegisterForm και απλώς κάντε κλικ στο «Χρήση σε πρόγραμμα επεξεργασίας εμπλουτισμένου κειμένου και στο πλέγμα» και κάντε κλικ στην αποθήκευση.
  • Τώρα θέλουμε να το τοποθετήσουμε κάπου, οπότε θα θελήσετε να μεταβείτε στην καρτέλα Περιεχόμενο, κάντε δεξί κλικ στην Αρχική σελίδα & Δημιουργήστε μια νέα „Απλή σελίδα“ που ονομάζεται Εγγραφή.
  • Κάντε κλικ στην επιλογή „Απόκρυψη από το μενού πλοήγησης“ και, στη συνέχεια, απλώς μεταβείτε και συμπεριλάβετε τη νέα μας μακροεντολή και πατήστε αποθήκευση.
  • Για τη σύνδεση, ακολουθήσαμε μια πιο παραδοσιακή προσέγγιση ελέγχου ταυτότητας με φόρμες. Για αυτήν τη σελίδα, ωστόσο… θα κάνω κάτι λίγο πιο “Umbraco-centric” και δεν θα χρειαστεί καν να προσθέσουμε χειριστήριο, γιατί πραγματικά… όλη αυτή η λειτουργικότητα είναι ήδη ψημένη στο Umbraco, οπότε δεν υπάρχει χρειάζεται ακόμη και να δημιουργήσετε έναν ελεγκτή. Επέλεξα να κωδικοποιήσω τη σελίδα σύνδεσης για να δείξω πόσο εύκολο είναι να προσαρμόσετε το Umbraco για να ταιριάζει στις ανάγκες σας. Επομένως, ανοίξτε το ~/Views/MacroPartials/RegisterForm.cshtml και επικολλήστε τον ακόλουθο κώδικα:

@inherits Umbraco.Web.Macros.PartialViewMacroPage
@using System.Web.Mvc.Html
@using Umbraco.Web
@using Umbraco.Web.Controllers
@{
var registerModel = Members.CreateRegistrationModel();
registerModel.LoginOnSuccess = true;
registerModel.UsernameIsEmail = true;
registerModel.RedirectUrl = "/";
var success = TempData["FormSuccess"] != null;
}
@if (success) //BUG This is a bug that I have reported to Umbraco and will fix it for them.
{
<p>>Thank you for registering!</p>
}
else
{
using (Html.BeginUmbracoForm<UmbRegisterController>
("HandleRegisterMember"))
{
<div class="container">
<fieldset>
@Html.ValidationSummary("registerModel", true)
<div class="row">
<div class="col-md-3">
<div class="form-group">
@Html.LabelFor(m => registerModel.Name)
</div>
</div>
<div class="col-md-3">
<div class="form-group">
@Html.TextBoxFor(m => registerModel.Name, new { @class = "form-control" })
@Html.ValidationMessageFor(m => registerModel.Name)
</div>
</div>
</div>
<div class="row">
<div class="col-md-3">
<div class="form-group">
@Html.LabelFor(m => registerModel.Email)
</div>
</div>
<div class="col-md-3">
<div class="form-group">
@Html.TextBoxFor(m => registerModel.Email, new { @class = "form-control" })
@Html.ValidationMessageFor(m => registerModel.Email)
</div>
</div>
</div>
<div class="row">
<div class="col-md-3">
<div class="form-group">
@Html.LabelFor(m => registerModel.Password)
</div>
</div>
<div class="col-md-3">
<div class="form-group">
@Html.PasswordFor(m => registerModel.Password)
@Html.ValidationMessageFor(m => registerModel.Password)
</div>
</div>
</div>
@if (registerModel.MemberProperties != null)
{
@*
It will only displays properties marked as "Member can edit" on the "Info" tab of the Member Type.
*@
for (var i = 0; i < registerModel.MemberProperties.Count; i++)
{
@Html.LabelFor(m => registerModel.MemberProperties[i].Value, registerModel.MemberProperties[i].Name)
@*
By default this will render a textbox but if you want to change the editor template for this property you can
easily change it. For example, if you wanted to render a custom editor for this field called "MyEditor" you would
create a file at ~/Views/Shared/EditorTemplates/MyEditor.cshtml", then you will change the next line of code to
render your specific editor template like:
@Html.EditorFor(m => profileModel.MemberProperties[i].Value, "MyEditor")
*@
@Html.EditorFor(m => registerModel.MemberProperties[i].Value)
@Html.HiddenFor(m => registerModel.MemberProperties[i].Alias)
<br />
}
}
@Html.HiddenFor(m => registerModel.MemberTypeAlias)
@Html.HiddenFor(m => registerModel.RedirectUrl)
@Html.HiddenFor(m => registerModel.UsernameIsEmail)
<div class="row">
<div class="col-md-12">
<button type="submit" class="btn btn-primary">Register</button>
</div>
</div>
</fieldset>
</div>
}
}

Είναι τόσο απλό! Σημείωση: Μην προσπαθήσετε να χρησιμοποιήσετε τη μεταβλητή επιτυχίας. Σε προηγούμενες εκδόσεις του Umbraco, έβαζαν TempData[“FormSuccess”] στα παρασκήνια. Φαίνεται ότι δεν το κάνουν πια. Πρέπει να δω τι λένε για αυτό το „bug“. Το άφησα εκεί γιατί αν επιβεβαιώσουν ότι είναι σφάλμα, θα το διορθώσω και θα λειτουργήσει σε μια μελλοντική έκδοση του Umbraco.

Αθροιση

Σε αυτό το άρθρο, καλύψαμε πόσο εύκολο είναι να ρυθμίσετε τον έλεγχο ταυτότητας και την εξουσιοδότηση στο Umbraco 8. Δεν είναι τρομερά διαφορετικό από τον τρόπο που λειτουργεί από την έκδοση έξι. Καλύψαμε επίσης την απλή και διακριτική επικύρωση φόρμας. Δεν ολοκλήρωσα τη σελίδα „Ο λογαριασμός μου“ επίτηδες για να δώσω στους αναγνώστες την ευκαιρία να προσπαθήσουν να το λύσουν μόνοι τους. Στην πηγή για το άρθρο 4, θα συμπεριλάβω κάποιο κώδικα για τη σελίδα „Ο λογαριασμός μου“. Είναι σημαντικό να θυμάστε ότι ο έλεγχος ταυτότητας μέλους στο Umbraco βασίζεται στον Έλεγχο ταυτότητας με φόρμες με πολύ λίγες ήπιες διαφορές.

Ο πλήρης πηγαίος κώδικας για αυτό το άρθρο βρίσκεται στη διεύθυνση: https://bitbucket.org/uniquesoftware/blogposts/src/master/USD.Umbraco.Article3.UI

Όπως πάντα, το όνομα χρήστη και ο κωδικός πρόσβασης στο back office της Umbraco είναι:
Όνομα χρήστη: [email protected]
Κωδικός πρόσβασης: Q1w2e3r4t5y6!

Εάν έχετε οποιεσδήποτε ερωτήσεις, μη διστάσετε να μου στείλετε μια γραμμή ανά πάσα στιγμή.

Έρχεται την επόμενη φορά

Στο επόμενο μάθημα, θα αρχίσουμε να δουλεύουμε σε μερικά πιο προχωρημένα θέματα. Θα χρησιμοποιήσουμε το IdentityServer4 και το ASP.Net Core για να γράψουμε έναν προσαρμοσμένο πάροχο συνδρομής που θα επιτρέπει την ενιαία σύνδεση και τον έλεγχο ταυτότητας τρίτου μέρους τόσο για το back-office όσο και για τα μέλη. Θα επεκτείνουμε επίσης το back office, ώστε να μπορείτε να διαχειρίζεστε τους χρήστες του IdentityServer απευθείας από το back office. Μέχρι τότε: Καλή Κωδικοποίηση!

Schreibe einen Kommentar