Действие по выходу из системы с использованием базовой проверки подлинности файлов cookie Asp.Net - PullRequest
1 голос
/ 14 мая 2019

Я реализовал аутентификацию в Asp.Net Core 2.2 следующим образом:

public async Task<IActionResult> LoginAsync(string user, string password)
    {
        if (user == "admin" && password == "admin")
        {
            var claims = new[] { new Claim(ClaimTypes.Name, user),
            new Claim(ClaimTypes.Role, "Admin") };

            var identity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);

            await HttpContext.SignInAsync(
                CookieAuthenticationDefaults.AuthenticationScheme,
                new ClaimsPrincipal(identity));

            return RedirectToAction("Index", "Home");
        {
        else
        {
            return RedirectToAction("Login", "Users");
        }

Мне нужно сделать выход из системы сейчас. Я использовал для достижения этого в Asp.Net MVC с FormsAuthentication.SignOut () ... Мне нужно знать правильный способ сделать это в Asp.Net Core 2.2

То, что я пытался сделать, это выполнить действие «Выход из системы» следующим образом:

    public async void Logout()
    {
        await HttpContext.SignOutAsync();
        return RedirectToAction("Index","Home");
    }

И использовал следующий код в моем NavBar:

@if (User.Identity.IsAuthenticated)
            {
                using (Html.BeginForm("LogOff", "Account", FormMethod.Post, new { id = "logoutForm", @class = "navbar-right" }))
                {
                    @Html.AntiForgeryToken()

                    <ul class="nav navbar-nav navbar-right">
                        <li>
                            @Html.ActionLink("Hello " + User.Identity.Name + "!", "Index", "Manage", routeValues: null, htmlAttributes: new { title = "Manage" })
                        </li>
                        <li class="nav-item">
                            <form class="form-inline" asp-area="Identity" asp-page="/Users/Logout" asp-route-returnUrl="@Url.Action("Index", "Home", new { area = "" })">
                                <button type="submit" class="nav-link btn btn-link text-dark">Logout</button>
                            </form>
                        </li>
                    </ul>
                }
            }
            else
            {
                <ul class="nav navbar-nav navbar-right">
                    <li>@Html.ActionLink("Register", "Register", "Account", routeValues: null, htmlAttributes: new { id = "registerLink" })</li>
                    <li>@Html.ActionLink("Log in", "Login", "Account", routeValues: null, htmlAttributes: new { id = "loginLink" })</li>
                </ul>
            }

Следуя инструкциям из этого документа

Это правильно показывает кнопку «Выйти», но нажатие этой кнопки не вызывает моего действия, и пользователь не вышел из системы.

1 Ответ

0 голосов
/ 14 мая 2019

Оказывается, я просто ошибался в своем взгляде. Я назвал неправильное действие в моей форме.

using (Html.BeginForm (" LogOff ", " Account ", FormMethod.Post, new {id = "logoutForm", @class = "navbar-right"} ))

Должно было быть, Html.BeginForm("Logout","Users, ...)

Кроме того, моя форма отправляла запрос Post, поэтому мое действие должно было быть украшено [HttpPost], например:

[HttpPost]
public async Task<IActionResult> Logout()
{
    await HttpContext.SignOutAsync();
    return RedirectToAction("Index","Home");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...