После использования быстрого входа в Google API работает, но при перенаправлении на страницу выдает ошибку с индексом вне диапазона - PullRequest
0 голосов
/ 14 мая 2018

Когда я использую это для входа через Google API , после успешного входа в систему я получаю индекс ошибки вне диапазона с красной линией в if (s[0].ToString() == "Admin"). Может ли кто-нибудь помочь мне эту проверку. И что мне нужно изменить в этом коде.

if (User.Identity.IsAuthenticated)
{
    var user = User.Identity;
    ApplicationDbContext context = new ApplicationDbContext();
    var UserManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context));
    var s = UserManager.GetRoles(user.GetUserId());
    if (s[0].ToString() == "Admin")
    {
        return true;
    }
    else
    {
        return false;
    }
}

1 Ответ

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

GetRoles() возвращает IList. Этот список может содержать или не содержать элементы. Если он не содержит никаких ролей, его длина будет равна 0, поэтому доступ к его члену по индексу 0 завершится неудачей.

Вы можете использовать

if(s.Contains("Admin")) 
{
    return true;          
}
return false;

Также: Вы не можете быть уверены, что даже если пользователь является администратором, в коллекции возвращенных ролей есть «Admin» с индексом 0. Что, если она не упорядочена в алфавитном порядке или если есть роль перед вызовом Admin » _admin». Ваш код вернет ложный результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...