Проверьте, вошел ли пользователь в систему с помощью аутентификации на основе токенов в ASP.NET Core.

Мне удалось реализовать эту систему аутентификации на основе токенов в моем приложении, но у меня есть небольшой вопрос. Как я могу проверить, подписал ли пользователь его (например, если в запросе есть действительный токен) в методе? Так что с [Авторизовать]?

Итак, у меня есть контроллер, и в этом контроллере я хочу проверить, вошел ли пользователь в систему. Я подумал об использовании этого:

if (_signInManager.IsSignedIn(ClaimsPrincipal.Current))
{
    ...
}

но это не работает, так как ClaimsPrincipal.Current всегда имеет значение null


person user2657943    schedule 24.12.2016    source источник


Ответы (2)


Вам не нужно использовать SigninManager или что-то подобное. Пользователь внедряется в конвейер (в свойстве User базового контроллера), и его информация автоматически заполняется промежуточным программным обеспечением аутентификации (файлом cookie или токеном). Итак, на вашем контроллере:

bool isAuthenticated = User.Identity.IsAuthenticated;
person Vi100    schedule 24.12.2016
comment
Я попробовал ваш код, но он говорит The name 'User' does not exist in the current context - person user2657943; 24.12.2016
comment
Ваш класс контроллера наследуется от контроллера или это POCO? - person Vi100; 24.12.2016
comment
Наследование от контроллера исправило это! Не могу поверить, что я забыл это! - person user2657943; 24.12.2016

да . поместите атрибут [Authorize] над вашим классом или методами, чтобы проверить, аутентифицирован ли пользователь или нет. Вы можете получить пользователя по этому коду:

var principal = User as ClaimsPrincipal;
var check = User.Identity.IsAuthenticated;
person Mostafa Esmaeili    schedule 24.12.2016
comment
Я бы хотел сначала попробовать без [Авторизации], но там написано The name 'User' does not exist in the current context - person user2657943; 24.12.2016
comment
Вам потребуется следующее пространство имен: using System.Security.Principal; - person Mostafa Esmaeili; 24.12.2016
comment
Я сослался на это сейчас, но это не имеет значения - person user2657943; 24.12.2016
comment
или используйте HttpContext.Current.User - person Mostafa Esmaeili; 24.12.2016
comment
HttpContext.Current.User - person Mostafa Esmaeili; 24.12.2016