如何检查用户是否已在 Sitefinity 小部件模板中登录(通过身份验证)?

How to check if user is logged in (authenticated) in Sitefinity widget template?

我需要通过小部件模板向未登录的用户显示一段文本。小部件模板为 Sitefinity 动态模块提供服务,该模块部分可供未登录用户使用。我希望未登录的用户收到一条消息,提示他们应该登录才能阅读全部内容。

我已经设置了字段的权限,一切正常,但唯一缺少的部分是向未登录的用户显示消息。

我在一个简单的 Web 表单测试文件中对此进行了测试,它有效:

<p>You are <asp:Literal ID="UserStatus" runat="server" />.</p>

隐藏代码是:

public string Name { get; set; }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (Page.Request.IsAuthenticated)
        {
            UserStatus.Text = "Logged in";
        }
        else
        {
            UserStatus.Text = "Not logged in";
        }
    }

我知道有一种方法可以将代码隐藏添加到 Sitefinity 中的小部件模板,但是当我尝试将上述代码隐藏添加到我的小部件模板时,出现此错误:

Object reference not set to an instance of an object.

并且错误指向该行:

UserStatus.Text = "Logged in";

如何通过代码隐藏和小部件模板或任何其他解决方案或方法来完成此操作?

你有autoeventwireup="true"吗?

如果这没有帮助,您可以像这样制作文字文本:

" />

类似上面的内容。抱歉在 phone 上这样做,所以语法有点不对。还要查看该小部件的小部件模板编辑器,它应该在右侧有一个 属性 用于您可以插入的身份验证。

祝你好运

因为 Sitefinity 小部件模板本质上只是 ascx 文件,您可以做的是创建另一个自定义用户控件,然后从您的小部件模板中引用它,而不是使用代码隐藏路由。

我已经修改了您的代码以使用 Sitefinity api 检查用户是否已登录,您可以在页面加载事件中为您将在小部件上注册的新控件使用它模板:

protected void Page_Load(object sender, EventArgs e)
{

    if  (ClaimsManager.GetCurrentIdentity().IsAuthenticated)
        UserStatus.Text = "Logged in";
    else
        UserStatus.Text = "Not logged in";
}

您将需要以下 using 指令:

using Telerik.Sitefinity.Security.Claims;

创建自定义控件后,您可以使用 Import 或 Register 指令从小部件模板中引用它:

<%@ Register TagName="LoginStatus" TagPrefix="Custom" Src="~/Controls/LoginStatus/LoginStatus.ascx" %>

然后您可以像这样使用控件:

<Custom:LoginStatus runat="server" />

这是另一个 post 与此相关的内容:SiteFinity if user logged in