在视图中显示经过身份验证和匿名的内容

Posted

技术标签:

【中文标题】在视图中显示经过身份验证和匿名的内容【英文标题】:Display authenticated and anonymous content in a view 【发布时间】:2013-12-09 21:34:39 【问题描述】:

我是网络开发的新手。

考虑用户可以登录的网站(例如 Facebook 登录)

假设我知道用户是否已登录(我正在寻找方法;) - 是否有可能在同一个视图(.cshtml)上 - 如果用户匿名,部分元素将被隐藏还是会在用户登录时显示?你知道 - 像好的属性或条件(简而言之 - 将逻辑放在同一个视图上而不是管理两个 .cshtml)

【问题讨论】:

【参考方案1】:

我个人不喜欢在我的观点中使用 if 语句,因为它们很容易开始变得混乱,尤其是在您使用角色时。

为了避免这种情况,我更喜欢这样做。

    创建一个 html 帮助器,其中包含这样抽象出来的逻辑:

    namespace System.Web.Mvc
    
        public static class HtmlHelperExtensions
        
            public static MvcHtmlString UserMessage(this HtmlHelper htmlHelper)
            
            string welcomeFormat = "Welcome, 0";
            var isAuthenticated = htmlHelper.ViewContext.HttpContext.User.Identity.IsAuthenticated;
            var name = htmlHelper.ViewContext.HttpContext.User.Identity.Name;
            var message = isAuthenticated ? string.Format(welcomeFormat, name) : string.Format(welcomeFormat, "anonymous!");
            return new MvcHtmlString(message);
           
       
    
    

    像这样在我的视图中调用这个方法:

    <p>@Html.UserMessage()</p>
    

如果您是 Web 开发新手,Helper 扩展程序的代码可能看起来有点繁琐,但您最终只需要编写一次,而用于在其他地方调用它的代码更简单且可重用。

这是一篇关于 Html 助手的文章以获取更多信息:

http://www.codeproject.com/Articles/649394/ASP-NET-MVC-Custom-HTML-Helpers-Csharp

更新

也忘了提到这种技术,它再次避免了 if 语句。

创建两个局部视图,例如 _auth.cshtml_unauth.cshtml

创建一个检查用户是否通过身份验证并返回相关部分的操作,即

public ActionResult FooContent()

    if (User.Identity.IsAuthenticated)
    
        return PartialView("_auth");
    
    else
    
        return PartialView("_unauth");
    
 

然后像这样在您的视图中调用该操作:

@Url.Action("FooContent", "Contoller");

这也可以用于检查角色并返回不同的部分。

【讨论】:

感谢感谢您的两个答案,并会尝试并尽快通知您。我想这里没有最佳实践吗?喜欢这里的一些网页设计模式吗? 真的是个人选择,让他们都尝试一下解决方案,看看你喜欢哪个。 :) 我完全忘记了答案中的更新方法。我认为这也是比 if 语句更好的做法。 :) 感谢您的宝贵时间 :)【参考方案2】:

是的,视图可以有逻辑。

这是一个代码示例,根据用户是否登录,向用户显示不同的内容。

@if (User.Identity.IsAuthenticated)

    <p>Welcome, @User.Identity.Name!</p>

else

    <p>Welcome, anonymous!</p>

【讨论】:

以上是关于在视图中显示经过身份验证和匿名的内容的主要内容,如果未能解决你的问题,请参考以下文章

匿名用户和经过身份验证的用户使用相同的端点

将 JWT 用于匿名和经过身份验证的用户

Drupal 8 Views 某些字段不显示给经过身份验证的用户

Rest Web 服务:具有令牌安全性的匿名和经过身份验证的用户

使用 AWS cognito 进行匿名身份验证

Blazor 使用 Azure AD 身份验证允许匿名访问