Pokud jste svůj MVC projekt vytvořili ve Visual Studiu ze šablony ASP.NET MVC Core Web App (Model-View-Controller) a pokud jste při jeho vytváření u autentizace vybrali Individual Accounts (individuální účty), pak máte vlastně registraci a login ve vaší appce zadarmo. Udělá to za vás tzv. ASP.NET Identity framework.
Když spustíte projekt a podíváte se na úvodní stránku, jsou vpravo nahoře odkazy pro Registraci a Login.
Po otevření registračního formuláře a zadání emailu a hesla vám nejspíš aplikace vyhodí chybu, že nemohla najít tabulku AspNetUsers.
Nejedná se jen o AspNetUsers. Je to vlastně sada asi sedmi tabulek, jejichž jména začínají AspNet....
Tabulky lze dogenerovat přes VS, pokud máme v našem projektu korektně nastavené připojení do databáze. Viz Napojení na databázi.
Stačí otevřít konzoli NuGet Package Manageru a zadat příkaz Update-Database
. Všechny tabulky se automaticky vytvoří
ve vaší MS SQL databázi, jejíž connection string máte korektně nastavený v projektu (soubor appsettings.json).
Pokud v controlleru ve stejné akci potřebujeme provést jednu činnost pro uživatele, který se ještě nepřihlásil do aplikace, a jinou činnost pro toho, kdo je již přihlášený, můžeme využít objekt SignInManager.
Nejprve přidáme referenci na objekt do controlleru. Dependency Injection nám zajistí, že do konstruktoru bude předána reference na existující objekt typu SignInManager.
[Route("test")] public class TestController : Controller { private readonly SignInManager<IdentityUser> signInManager; public TestController(SignInManager<IdentityUser> signInManager) { this.signInManager = signInManager; } }
Použití objektu SignInManager si ukážeme na příkladu akce, která má vrátit jméno přihlášeného uživatele, případně anonymous, pokud uživatel není do appky přihlášen.
// GET /test/auth/signed [HttpGet("auth/signed")] public IActionResult GetSignedInUser() { if (this.signInManager.IsSignedIn(this.User)) { return new OkObjectResult(this.User.Identity.Name); } return new UnauthorizedObjectResult("anonymous"); }