Как проверить, авторизован ли пользователь? - PullRequest
0 голосов
/ 22 февраля 2020

В разделе «Вход в систему» ​​на моем веб-сайте, чтобы пользователь мог войти в систему, его адрес электронной почты должен быть подтвержден. Если это подтверждается, вызывается метод SignInAsyn c.

Обычно это нормально, но есть определенные разделы веб-сайта, к которым «обычные пользователи» не могут получить доступ. Поэтому я использовал

[Authorize(Roles ="Admin")]

над всеми контроллерами, к которым пользователь не может получить доступ. Моя проблема сейчас заключается в том, что в случае, если пользователь введет ссылку, к которой у него нет доступа, из-за этого атрибута Authorize потребуется пользователь, имеющий роль администратора, для входа в систему. А когда обычный пользователь пытается войти в систему, тогда он просто обновляет страницу входа. Мне нужен способ проверить, авторизован ли пользователь (не аутентифицирован), но авторизован, чтобы я мог отобразить соответствующее сообщение об ошибке. Это код, который у меня есть на данный момент:

if (ModelState.IsValid)
{
    var user = await UserManager.FindAsync(model.Email, model.Password);

    if (user != null)
    {
        if (user.EmailConfirmed == true)
        {
            //await SignInManager.SignInAsync(user, model.RememberMe); return RedirectToLocal(returnUrl);
            await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);
        }
        else
        {
            ModelState.AddModelError("", "Confirm Email Address.");
            model.ErrorMessage = ("You need to confirm your email address in order to log in, please check yout emails");
            return View(model);
        }
    }
    else
    {
        ModelState.AddModelError("", "Invalid username or password.");
        model.ErrorMessage = "Username or password is incorrect"; 
        return View(model);
    }
}

Я искал ответы на этот вопрос в Интернете, но на всех найденных веб-сайтах есть решения для проверки того, прошел ли пользователь аутентификацию (вошел в систему), и не проверяет, если пользователь авторизован, что я и пытаюсь сделать.

1 Ответ

0 голосов
/ 22 февраля 2020

На других веб-сайтах кажется, что проверка того, прошел ли пользователь аутентификацию, - это то же самое, что проверка того, зарегистрирован ли пользователь, но также и проверка правильности определенной роли пользователя. например, «Админ». Поэтому следующий код


if (user.EmailConfirmed == true)
{
    if (USER.Identity.IsAuthenticated == true)
    {
        await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);
    }
    else
    {
        ModelState.AddModelError("Authorization", "You are not authorized to access this section of the website");
    }

}

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

...