如何根据用户是不是登录启用/禁用元素?
Posted
技术标签:
【中文标题】如何根据用户是不是登录启用/禁用元素?【英文标题】:How to enable/disable elements depending whether the user is logged in or not?如何根据用户是否登录启用/禁用元素? 【发布时间】:2021-04-23 18:32:16 【问题描述】:在到目前为止的所有示例中,我看到了如何显示完全不同视图的示例——一个用于用户登录的情况,另一个用于用户未登录的情况。
我想显示相同的元素,只是根据用户是否登录启用/禁用一些元素。我虽然可以阅读 context.User.Identity.IsAuthenticated
并像这样使用它:
<NavLink class="nav-link" href="foobar"
IsDisabled="@(!(context.User.Identity?.IsAuthenticated ?? false))">
...
</NavLink>
但这需要context
。此属性由AuthorizeView
提供,而此组件反过来强制执行上述两组视图之间的严格分割。
那么如何实现只用单一的通用视图启用/禁用呢?
我完全知道这不是任何形式的安全措施。
更新 两个答案都具有相同的效果(再次感谢您),但有一点需要注意 - 就在登录这两种方法后,仍然返回信息用户未通过身份验证。以下是后续问题:How to get fresh information whether the user is logged in?
【问题讨论】:
【参考方案1】:您可以通过定义Task<AuthenticationState>
类型的级联参数来获取认证状态数据
这是来自文档的完整示例:
@page "/"
<button @onclick="LogUsername">Log username</button>
<p>@_authMessage</p>
@code
[CascadingParameter]
private Task<AuthenticationState> authenticationStateTask get; set;
private string _authMessage;
private async Task LogUsername()
var authState = await authenticationStateTask;
var user = authState.User;
if (user.Identity.IsAuthenticated)
_authMessage = $"user.Identity.Name is authenticated.";
else
_authMessage = "The user is NOT authenticated.";
注意:CascadingAuthenticationState
组件是向相关方公开身份验证状态的组件...
【讨论】:
非常感谢。仅作记录,目前此代码无法按预期对我工作-登录 LoginDisplay 组件后显示我已登录 id,显示我的姓名,但此代码声称我未通过身份验证。重新加载整个页面后,它表明我是 - 所以双方是同步的。现在的问题是为什么它在登录后看不到我已登录(我将为它打开另一个问题)。【参考方案2】:您应该可以为此使用AuthenticationStateProvider
。在官方docs 中有一个示例如何做到这一点。
【讨论】:
以上是关于如何根据用户是不是登录启用/禁用元素?的主要内容,如果未能解决你的问题,请参考以下文章
如何根据带有闪亮元素的 R Markdown 文档中的条件禁用按钮?
如何根据某人是不是使用 AngularJS 登录来隐藏和显示导航栏元素?