2016-12-24 6 views
2

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

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

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

, но он не работает, так как ClaimsPrincipal.Current всегда нуль

ответ

17

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

bool isAuthenticated = User.Identity.IsAuthenticated; 
+1

Я пробовал ваш код, но он говорит: 'Имя 'Пользователь' не существует в текущем контексте' – user2657943

+1

Наследует ли ваш класс контроллера от« Контроллера »или это POCO? – Vi100

+1

Наследование от Controller исправлено! Не могу поверить, что я забыл об этом! – user2657943

1

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

var principal = User as ClaimsPrincipal; 
var check = User.Identity.IsAuthenticated; 
+0

Я хотел бы попробовать это без [Авторизоваться] первый, но он говорит, 'Название«User»не существует в текущем context' – user2657943

+0

Вам необходимо следующее пространство имен: с использованием System.Security.Principal; –

+0

Я ссылался на это сейчас, но он не имеет значения – user2657943