Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Tadeáš Burda
Brigádník
Avatar
Tadeáš Burda :22.4.2020 14:35
<a asp-area="Account" asp-controller="Home" asp-action="SignIn" asp-route-returnUrl="@ViewData["ReturnUrl"]">prihlásiť...</a>

Pri tomto kóde mi nevygeneruje link ".../Account/Ho­me/SignIn?retur­nUrl=..." ako by som čakal ale len ".../SignIn?re­turnUrl=...". Ak inde na stránke použijem asp-area=... tak to generuje normálne.

Zkusil jsem: Chyba je medzi strojom a stoličku, pretože očividne som nepochopil ako funguje rotovanie, tak ak by niekto mohol trochu času a vysvetliť mi kde je problém, budem vďační.

app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "areas",
                    pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{area=MyWeb}/{controller=Home}/{action=Index}/{id?}");
                endpoints.MapRazorPages();
            });

Takto to mam v Startup.cs a na všetko iné mi to ide normálne. Teraz som len pridával toto

services.ConfigureApplicationCookie(cac => cac.LoginPath = "/Account/Home/SignIn"); // Change LogIn path on Account/Home/SignIn

pre automatické presmerovanie pri autorizácii ale neviem či tomu vadí toto. Malo by to len nastaviť cestu pre [Authorize].

Kód v controllery je takýto

namespace MyWeb.Areas.Account.Controllers
{
    [Authorize]
    [Area("Account")]
    public class HomeController : Controller
    {
        private readonly UserManager<IdentityUser> _userManager;

        private readonly SignInManager<IdentityUser> _signInManager;

        private readonly RoleManager<IdentityRole> _roleManager;



        public HomeController(UserManager<IdentityUser> userManager, SignInManager<IdentityUser> signInManager, RoleManager<IdentityRole> roleManager)
        {
            _userManager = userManager;
            _signInManager = signInManager;
            _roleManager = roleManager;
        }



        [HttpGet]
        public IActionResult Index()
        {
            return View();
        }

        [HttpGet]
        [AllowAnonymous]
        public IActionResult SignIn(string returnUrl = null)
        {
            ViewData["ReturnUrl"] = returnUrl;
            return View();
        }

        [HttpPost("SignIn")]
        [AllowAnonymous]
        public async Task<IActionResult> SignInAsync(AccountViewModel model, string returnUrl = null)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    var isValid = await _signInManager.PasswordSignInAsync(model.Email, model.Password, false, lockoutOnFailure: false);
                    if (isValid.Succeeded)
                    {
                        this.AddAlertToFront(new Alert("Prihlásenie prebehlo úspešne.", EAlertType.info));

                        if (returnUrl != null)
                            return Redirect(returnUrl);
                        return Redirect("/MyWeb/Home/Index/");
                    }

                    this.AddAlertToFront(new Alert("Email, alebo heslo sú neplatné! Skúste to znova...", EAlertType.warning));
                    //this.AddAlertToFront(new Alert("Profil neexistuje, ak chcete pokračovať, registrujte sa!", EAlertType.warning));
                    ///return RedirectToAction(nameof(SignUp), new { returnUrl });
                }
            }
            catch (Exception e)
            {
                this.AddAlertToFront(new Alert(e.Message, EAlertType.danger));
                this.AddAlertToFront(new Alert("Prihlásenie zlyhalo...", EAlertType.danger));
            }

            return View(model);
        }

Chci docílit: Na SignIn metódu v Home controllery v Account area sa posila ešte string returnUrl takže to generujem cez asp-..., len teraz mi to prestalo ist a netuším prečo.

 
Odpovědět
22.4.2020 14:35
Avatar
Tadeáš Burda
Brigádník
Avatar
Tadeáš Burda :23.4.2020 8:00

Tak sem to vyriešil :-) Problém byl v tem že to má už v sebe /Identity/Accou­nt/..., taže sa mi to bylo. Hodiny v dokumentácii a už temu routovani chápu :-P Stačí ked pridáte do Startup.cs toto:

endpoints.MapAreaControllerRoute("account", "MyAccount", "Account/{controller=Home}/{action=Index}/{id?}");

a volate to takto:

<a class="nav-link" asp-area="MyAccount" asp-controller="Home" asp-action="SignIn" asp-route-returnUrl="@ViewData["ReturnUrl"]">Účet</a>

potom už .netko vie že má volat vášu area a nie tu z Identity. Teda tak sem to aspon pochopil ja

Akceptované řešení
+5 Zkušeností
Řešení problému
 
Nahoru Odpovědět
23.4.2020 8:00
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.