在ASP.NET Core中检查用户是否使用基于令牌的身份验证登录。

27

我已经在我的应用程序中实现了基于令牌的身份验证系统,但我有一个小问题。在方法内如何检查用户是否已登录(例如,如果请求中存在有效的令牌)?所以使用 [Authorize]?

因此,我有一个控制器,在该控制器中,我想检查用户是否已登录。我考虑使用以下方法:

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

但它不起作用,因为ClaimsPrincipal.Current始终为空

2个回答

71

您不需要使用SigninManager或类似的东西。用户被注入到管道中(在基础控制器的User属性上),并且它的信息会被身份验证中间件(cookie或令牌)自动填充。因此,在您的控制器上:

bool isAuthenticated = User.Identity.IsAuthenticated;

3
我尝试了你的代码,但是它显示“当前上下文中不存在'User'名称”。 - user2657943
1
你的控制器类继承自“Controller”还是它是一个POCO? - Vi100
2
继承自控制器就解决了!我简直不敢相信我忘记了这个! - user2657943
如果网站以匿名方式运行,这将无法工作。 - undefined

4

是的。将 [Authorize] 属性放在你的类或方法上以检查用户是否已经认证。你可以通过以下代码来获取用户:

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

我想先尝试一下没有 [Authorize] 的情况,但它显示“当前上下文中不存在 'User' 的名称”。 - user2657943
你需要以下命名空间:using System.Security.Principal; - Mostafa Esmaeili
我现在已经引用了,但是没有任何区别。 - user2657943
1
或者使用HttpContext.Current.User - Mostafa Esmaeili
HttpContext.Current.User - Mostafa Esmaeili

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接