ASP.Net Core доступ к файлу

Было создано веб приложение с базой данных и возможностью авторизации\регистрации по видеоурокам: https://www.youtube.com/watch?v=KNt1V72ZRAY&list=PLEtg-LdqEKXbgnzHp28hEDg8udku0jWLV&index=9 Решение - IdentityServer4 Сейчас структура приложения выглядит следующим образом:

введите сюда описание изображения

Файл Secret.cshtml это тот файл, в который должен осуществлятся переход после успешной авторизации. К сжалению я не разорался как реализовать туда переход, в моём случае, если я указываю в login.cshtml ссылку на переход к этому файлу мне пишет что он недоступен, полагаю что это связанно с правами доступа, залогинится то я залогинился, но переход к файлу осуществляю без этих доступов. Как временное решение в файле AuthController.cs я прописал файлу Secret ОБЩИЙ ДОСТУП, что разумеется является не правильным решением

.input {
    font-size: 20px;
    font-family: Arial;
    background-color: #fff;
    width: 100%;
}

.header {
    font-family: Arial;
    color: #332600;
    font-size: 30px;
    text-align: center;
}

.button {
    font-size: 20px;
    background-color: #68dacd;
    border-radius: 4px;
    color: #332600;
    font-family: Arial;
    width: 100%;
    height: 50px
}

.block {
    margin-top: 10px;
}

.switch-button {
    margin-top: 10px;
    font-size: 15px;
    border-radius: 4px;
    color: #332600;
    font-family: Arial;
    display: inline-block;
    text-align: center;
    width: 100%;
}
@model LoginViewModel
<head>
    <!--Подключем стиль-->
    <link [email protected]("~/Styles/app.css") rel="stylesheet" type="text/css"/>
</head>

<!--Атрибут asp-controller назначает контроллер, используемый для создания URL-адреса. Следующий элемент перечисляет всех говорящих:-->
<!--Значение атрибута asp-action представляет имя действия контроллера, включенное в созданный атрибут-->
<!--method-Атрибут method сообщает серверу о методе запроса.-->
<!--/Auth/Login-->
<form asp-controller="Auth" asp-action="Login" method="post">
    <!--<input>элементы типа hiddenпозволяют веб-разработчикам включать данные, которые не могут быть просмотрены или изменены пользователями при отправке формы-->
    <!--asp-for - Создает атрибуты HTML id и name для имени выражения, указанного в атрибуте asp-for. asp-for="Property1.Property2" равно m => m.Property1.Property2. Имя выражения совпадает со значением атрибута asp-for -->
    <input type="hidden" asp-for="ReturnUrl" value="/Auth/Secret"/>
    <div class="header">Авторизоваться</div>
    <div class="block">
        <label>Имя пользователя</label>
        <input asp-for="Username" class="input"/>
        <span asp-validation-for="Username"></span>
    </div>
    <div class="block">
        <label>Пароль</label>
        <input asp-for="Password" class="input"/>
        <span asp-validation-for="Password"></span>
    </div>
    <div class="block">
        <button type="submit" class="button">Войти</button>
    </div>
    <a asp-controller="Auth" asp-action="Register"
       asp-route-returnUrl="@Model.ReturnUrl" class="switch-button">Регистрация</a>
</form>

AuthController.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using IdentityServer4.Services;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Identity;
using Notes.Identity.Models;

namespace Notes.Identity.Controllers
{
    public class AuthController : Controller
    {
        private readonly SignInManager<AppUser> _signInManager;
        private readonly UserManager<AppUser> _userManager;
        private readonly IIdentityServerInteractionService _interactionService;

        public AuthController(SignInManager<AppUser> signInManager,
            UserManager<AppUser> userManager,
            IIdentityServerInteractionService interactionService) =>
            (_signInManager, _userManager, _interactionService) =
            (signInManager, userManager, interactionService);

        [HttpGet]
        public IActionResult Login(string returnUrl)
        {
            var viewModel = new LoginViewModel
            {
                ReturnUrl = returnUrl
            };
            return View(viewModel);
        }

        [HttpPost]
        public async Task<IActionResult> Login(LoginViewModel viewModel)
        {
            if (!ModelState.IsValid)
            {
                return View(viewModel);
            }

            var user = await _userManager.FindByNameAsync(viewModel.Username);
            if (user == null)
            {
                ModelState.AddModelError(string.Empty, "User not found");
                return View(viewModel);
            }

            var result = await _signInManager.PasswordSignInAsync(viewModel.Username,
                viewModel.Password, false, false);
            if (result.Succeeded)
            {
                return Redirect(viewModel.ReturnUrl);
            }
            ModelState.AddModelError(string.Empty, "Login error");
            return View(viewModel);
        }

        [HttpGet]
        public IActionResult Register(string returnUrl)
        {
            var viewModel = new RegisterViewModel
            {
                ReturnUrl = returnUrl
            };
            return View(viewModel);
        }

        [HttpPost]
        public async Task<IActionResult> Register(RegisterViewModel viewModel)
        {
            if (!ModelState.IsValid)
            {
                return View(viewModel);
            }

            var user = new AppUser
            {
                UserName = viewModel.Username
            };

            var result = await _userManager.CreateAsync(user, viewModel.Password);
            if (result.Succeeded)
            {
                await _signInManager.SignInAsync(user, false);
                return Redirect(viewModel.ReturnUrl);
            }
            ModelState.AddModelError(string.Empty, "Error occurred");
            return View(viewModel);
        }

        /*[HttpGet]
        public async Task<IActionResult> Logout(string logoutId)
        {
            await _signInManager.SignOutAsync();
            var logoutRequest = await _interactionService.GetLogoutContextAsync(logoutId);
            return Redirect(logoutRequest.PostLogoutRedirectUri);
        }*/



        [HttpGet]
        public IActionResult Secret(string returnUrl)
        {
            var viewModel = new LogoutViewModel
            {
                ReturnUrl = returnUrl
            };
            return View(viewModel);
        }


    }
}

LoginViewModel

using System.ComponentModel.DataAnnotations;

namespace Notes.Identity.Models
{
    public class LoginViewModel
    {
        [Required]
        public string Username { get; set; }

        [Required]
        [DataType(DataType.Password)]
        public string Password { get; set; }
        public string ReturnUrl { get; set; }
    }
}

Как сделать переход после авТоризации к файлу Secret правильно


Ответы (0 шт):