Razor view называет неправильное действие - PullRequest
0 голосов
/ 19 марта 2020

Я пытаюсь использовать аутентификацию Auth0 в моем приложении Asp. Net MVC. У меня есть Контроллер, называемый Контроллер учетных записей, и два действия внутри: Выход из системы и Вход в систему.

Я вызываю их из представления макетов, и если я нажимаю кнопку Выход из системы, то вызывается действие Выход из системы, и если я нажимаю кнопку Вход в систему, действие Вход в систему должно называться. Проблема в том, что не имеет значения, какую кнопку я нажимаю, она всегда выполняет действие входа в систему, может, у кого-то есть идеи?

AccountController.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;

namespace my_diet.Controllers
{
    public class AccountController : Controller
    {
        [Authorize]
        public async Task Logout()
        {
            await HttpContext.SignOutAsync("Auth0", new AuthenticationProperties
            {
                // Indicate here where Auth0 should redirect the user after a logout.
                // Note that the resulting absolute Uri must be whitelisted in the
                // **Allowed Logout URLs** settings for the app.
                RedirectUri = Url.Action("Index", "Home")
            });
            await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
        }
        public async Task Login(string returnUrl = "/")
        {
            await HttpContext.ChallengeAsync("Auth0", new AuthenticationProperties() { RedirectUri = returnUrl });
        }

    }
}

_layouts.cs html

<ul class="navbar-nav flex-grow-1">
@if (User.Identity.IsAuthenticated)
{
<li class="nav-item">
<a id="qsLogoutBtn" class="nav-link text-dark" asp-controller="Account" asp-action="Logout">Logout</a>
@*@Html.ActionLink("Logout", "Logout", "Account", new object { }, new { @class = "nav-link text-dark"})*@

</li>
}
else
{
<li class="nav-item">
<a id="qsLoginBtn" class="nav-link text-dark" asp-controller="Account" asp-action="x">Login</a>
</li>
}
</ul>

1 Ответ

2 голосов
/ 19 марта 2020

попробуйте это.

[AllowAnonymous]
public async Task Login(string returnUrl = "/")
{
   await HttpContext.ChallengeAsync("Auth0", new AuthenticationProperties() { 
   RedirectUri = returnUrl });
}

Дополнительные спецификации:

Вы также можете использовать атрибут AllowAnonymous , чтобы разрешить доступ не прошедшим проверку подлинности. пользователи для отдельных действий.

Например:

[Authorize]

    public class AccountController : Controller
    {
        [AllowAnonymous]
        public ActionResult Login()
        {
        }

        public ActionResult Logout()
        {
        }
    }

Это разрешает только аутентифицированным пользователям AccountController , , за исключением для действия входа в систему , которое доступно каждому, независимо от их аутентифицированного или неаутентифицированного / анонимного статуса.

Предупреждение:

[AllowAnonymous] обходит все авторизации заявления. Если вы комбинируете [AllowAnonymous] и любой атрибут [Authorize], атрибуты [Authorize] игнорируются. Например, если вы применяете [AllowAnonymous] на уровне контроллера, любые атрибуты [Authorize] на том же контроллере (или на любом действии в нем) игнорируются.

...