Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / ASP.NET Новый топик    Ответить
 Настройка маршрутизации при авторизации пользователя  [new]
Vlad__i__mir
Member

Откуда:
Сообщений: 466
Здравствуйте!

Подскажите как правильно сделать:

у меня на главной стр. 2-е ссылки:
1-ая для обычных пользователей
2-ая для администратора

для этих страниц у меня 3 контроллера:

1-ый для страницы пользователя - FriendsController

2-ой для страницы администратора - AdminController

3-ий - контроллер для авторизации и регистрации - AccountController, содержащий:
метод Login GET
метод Login POST - перенаправляет после успешной авторизации
метод Register GET
метод Register POST

Из контроллера AccountController метода Login POST меня может перенаправить только на 1-у станицу сейчас это страница пользователя.

Мне нужно чтобы, если выбирали ссылку страницы администратора, то перенаправляло не на страницу пользователя, а на страницу администратора.

Как это правильно сделать?
Определить в AdminController отдельно методы Login GET и Login POST для авторизации на эту страницу и перенаправлять при клике на неё в эти методы?

Или есть более правильный метод?
7 апр 21, 10:34    [22305291]     Ответить | Цитировать Сообщить модератору
 Re: Настройка маршрутизации при авторизации пользователя  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 22298
Vlad__i__mir
Или есть более правильный метод?
Обычно урл, на который нужно вернуться после аутентификации, передается на страницу логина как параметр запроса (?backurl=....)

Модератор: Тема перенесена из форума "WCF, Web Services, Remoting".


Сообщение было отредактировано: 7 апр 21, 11:01
7 апр 21, 11:05    [22305307]     Ответить | Цитировать Сообщить модератору
 Re: Настройка маршрутизации при авторизации пользователя  [new]
Vlad__i__mir
Member

Откуда:
Сообщений: 466
Shocker.Pro
Vlad__i__mir
Или есть более правильный метод?
Обычно урл, на который нужно вернуться после аутентификации, передается на страницу логина как параметр запроса (?backurl=....)

Модератор: Тема перенесена из форума "WCF, Web Services, Remoting".


А как этот url передать, если страница для входа для всех url-ов одна и та же?
7 апр 21, 12:16    [22305346]     Ответить | Цитировать Сообщить модератору
 Re: Настройка маршрутизации при авторизации пользователя  [new]
Kusanagi
Member

Откуда: от верблюда
Сообщений: 28
Vlad__i__mir

то перенаправляло не на страницу пользователя, а на страницу администратора.

Vlad__i__mir

Или есть более правильный метод?

Есть логика, которая вам требуется. Параметр, который используется для редиректа, называется returnUrl.
Посмотрите в коде, где он используется и устанавливайте в нужное значение, в зависимости от роли только что вошедшего пользователя.

Сообщение было отредактировано: 7 апр 21, 21:34
7 апр 21, 21:40    [22305697]     Ответить | Цитировать Сообщить модератору
 Re: Настройка маршрутизации при авторизации пользователя  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 22298
Vlad__i__mir
у меня на главной стр. 2-е ссылки:
вот эту ссылку и надо передать, одну из двух
7 апр 21, 21:40    [22305698]     Ответить | Цитировать Сообщить модератору
 Re: Настройка маршрутизации при авторизации пользователя  [new]
Vlad__i__mir
Member

Откуда:
Сообщений: 466
Shocker.Pro
Vlad__i__mir
у меня на главной стр. 2-е ссылки:
вот эту ссылку и надо передать, одну из двух

Если я вас правильно понял, то мне нужно на странице авторизации прописать два скрытых поля с 2-мя url (<input hidden asp-for="ReturnUrl" type="text" value="" />). Как тогда контроллеру авторизации дать знать какой url он должен использовать?
8 апр 21, 07:14    [22305772]     Ответить | Цитировать Сообщить модератору
 Re: Настройка маршрутизации при авторизации пользователя  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 22298
Откуда на странице авторизации окажется два поля, если на эту страницу передается только один url, на который будет переход после аутентификации?
Количество страниц, на которые может осуществляться переход вообще не волнует страницу авторизации. Ей дали url, она на него отправила, все.
Просто набери в поиске MVC ReturnUrl - целый вагон примеров
8 апр 21, 09:48    [22305811]     Ответить | Цитировать Сообщить модератору
 Re: Настройка маршрутизации при авторизации пользователя  [new]
Konst_One
Member

Откуда:
Сообщений: 11593
если точка входа одна, то после аутентификации юзера вы должны ему назначать соответствующую роль (админ/обычный юзер) и уже авторизовывать с нужными правами на доступ , потом сразу редиректить в нужный раздел сайта.

я к тому, что у вас должен быть прописан признак у логина, является ли этот юзер обычным или админом.
8 апр 21, 10:30    [22305843]     Ответить | Цитировать Сообщить модератору
 Re: Настройка маршрутизации при авторизации пользователя  [new]
Vlad__i__mir
Member

Откуда:
Сообщений: 466
Konst_One
если точка входа одна, то после аутентификации юзера вы должны ему назначать соответствующую роль (админ/обычный юзер) и уже авторизовывать с нужными правами на доступ , потом сразу редиректить в нужный раздел сайта.

я к тому, что у вас должен быть прописан признак у логина, является ли этот юзер обычным или админом.


Роли у меня есть, только админ может заходить на обе страницы
8 апр 21, 10:38    [22305847]     Ответить | Цитировать Сообщить модератору
 Re: Настройка маршрутизации при авторизации пользователя  [new]
Vlad__i__mir
Member

Откуда:
Сообщений: 466
Shocker.Pro
Откуда на странице авторизации окажется два поля, если на эту страницу передается только один url, на который будет переход после аутентификации?

гооглил, нашел вот такой пример https://metanit.com/sharp/aspnet5/16.4.php,

сделал по аналогии, url доходит до метода
[HttpGet]
        public IActionResult Login(string returnUrl = null)
        {
            return View(new LoginModel { ReturnUrl = returnUrl });
        }


но в метод авторизации он уже не попадает, да и как он туда может попасть, если там новый post-запрос:
[HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> Login(LoginModel model)
        {
            if (ModelState.IsValid)
            {
                User user = await db_context.User
                    .Include(u => u.Role)
                    .FirstOrDefaultAsync(u => u.UserName == model.UserName && u.Password == model.Password);
                if (user != null)
                {
                    await Authenticate(user); // аутентификация

                    // проверяем, принадлежит ли URL приложению
                    if (!string.IsNullOrEmpty(model.ReturnUrl) && Url.IsLocalUrl(model.ReturnUrl))
                    {
                        return Redirect(model.ReturnUrl);
                    }
                    else
                    {
                        return RedirectToAction("Index", "Friends");
                    }
                }
                else
                {
                    ModelState.AddModelError("", "Неправильный логин и (или) пароль");
                }
            }
            return View(model);
        }


Страница логирования:
<div class="container">
    <div class="row">
        <div class="col-md-offset-3 col-md-6"></div>      
        <div class="col-sm-4">
            <span class="heading" style="align-items:center">АВТОРИЗАЦИЯ</span>
            <form class="form-horizontal" asp-controller="Account" asp-action="Login" method="post">
                <div class="form-group">
                    <label class="control-label">Имя пользователя</label>
                    <input asp-for="UserName" class="form-control" type="email" id="inputEmail" placeholder="E-mail" />
                    <span asp-validation-for="UserName"></span>
                    <i class="fa fa-user"></i>
                </div>
                <div class="form-group">
                    <label class="control-label">Пароль</label>
                    <input asp-for="Password" class="form-control" type="password" id="inputPassword" placeholder="Password" />
                    <span asp-validation-for="Password"></span>
                    <i class="fa fa-lock"></i>
                    <a href="#" class="fa fa-question-circle"></a>
                </div>
                <div class="form-group">
                    <input type="submit" class="btn btn-default" value="Войти"/>
                </div>
                <div class="form-group">
                    <li class="nav-item">
                        <a class="nav-link text-dark" asp-area="" asp-action="Register" asp-controller="Account">
                            <font size="2" color="blue" face="Arial">Зарегистрироваться</font>
                        </a>
                    </li>
                </div>
            </form>
        </div>
        <div class="col-sm-4"></div>
    </div>
</div>


Сообщение было отредактировано: 8 апр 21, 11:46
8 апр 21, 11:52    [22305881]     Ответить | Цитировать Сообщить модератору
 Re: Настройка маршрутизации при авторизации пользователя  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 22298
Vlad__i__mir
Страница логирования:
и как у тебя returnUrl должен попасть в LoginModel если его нет в разметке?
8 апр 21, 23:14    [22306221]     Ответить | Цитировать Сообщить модератору
 Re: Настройка маршрутизации при авторизации пользователя  [new]
Vlad__i__mir
Member

Откуда:
Сообщений: 466
Shocker.Pro
и как у тебя returnUrl должен попасть в LoginModel если его нет в разметке?


Вы же сами говорили:
Shocker.Pro
Откуда на странице авторизации окажется два поля, если на эту страницу передается только один url, на который будет переход после аутентификации?
Количество страниц, на которые может осуществляться переход вообще не волнует страницу авторизации. Ей дали url, она на него отправила, все.
Просто набери в поиске MVC ReturnUrl - целый вагон примеров


LoginModel строится по странице авторизации.

Можете тогда конкретно сказать, где url-ы нужно прописывать?

Сообщение было отредактировано: 9 апр 21, 07:50
9 апр 21, 07:56    [22306265]     Ответить | Цитировать Сообщить модератору
 Re: Настройка маршрутизации при авторизации пользователя  [new]
Vlad__i__mir
Member

Откуда:
Сообщений: 466
Shocker.Pro
Vlad__i__mir
Страница логирования:
и как у тебя returnUrl должен попасть в LoginModel если его нет в разметке?


Понял, нужно было прописать:
asp-route-returnUrl="@Model.ReturnUrl"


Спасибо
9 апр 21, 09:12    [22306283]     Ответить | Цитировать Сообщить модератору
Все форумы / ASP.NET Ответить