我正在使用blazer服务器端应用程序进行测试,并尝试在.razor页面中获取登录用户。这个
UserManager.GetUserAsync(User)
在.cshtml视图中工作,但是我找不到在.razor页面中工作的方法。没有要访问的“用户”属性。我将IdentityUser与扩展IdentityUser的ApplicationUser模型一起使用。我正在使用AspNetCore 3.0 Preview 6。
答案 0 :(得分:4)
如果用AuthorizeView
组件包围代码,则可以访问提供当前用户的context
对象。
<AuthorizeView>
<Authorized>
<h1>Hello, @context.User.Identity.Name!</h1>
<p>You can only see this content if you're authenticated.</p>
</Authorized>
<NotAuthorized>
<h1>Authentication Failure!</h1>
<p>You're not signed in.</p>
</NotAuthorized>
</AuthorizeView>
如果您不想使用该方法,则可以请求authenticationStateTask
提供的名为CascadingAuthenticationState
的级联参数。
@page "/"
<button @onclick="@LogUsername">Log username</button>
@code {
[CascadingParameter]
private Task<AuthenticationState> authenticationStateTask { get; set; }
private async Task LogUsername()
{
var authState = await authenticationStateTask;
var user = authState.User;
if (user.Identity.IsAuthenticated)
{
Console.WriteLine($"{user.Identity.Name} is authenticated.");
}
else
{
Console.WriteLine("The user is NOT authenticated.");
}
}
}
答案 1 :(得分:0)
我做了什么:
services.AddHttpContextAccessor();
@inject UserManager<WebPageUser> UserManager
@inject IHttpContextAccessor HttpContextAccessor
<p>Hello @UserManager.GetUserName(HttpContextAccessor.HttpContext.User)</p>