Umbraco:检查页面是否标记为受保护,并重定向到登录

Umbraco:检查页面是否标记为受保护,并重定向到登录,umbraco,umbraco7,Umbraco,Umbraco7,在我的DocType中,我有一个名为“membersOnly”(true/false)的属性 选中时,我想检查,如果用户已登录,如果未登录,则重定向到具有推荐人的登录页面 但是最好的方法是什么呢?我不想把它放在我的主模板中。如何连接到请求管道,检查“membersOnly”字段是否存在,如果存在,并且已检查,并且用户未登录,则重定向用户 有什么小片段吗 此外,我也知道Umbraco内置的方法。但在这种情况下,我需要它只是后端页面上的一个简单复选框-但它激发的功能基本相同,就像我在后端使用内置的U

在我的DocType中,我有一个名为“membersOnly”(true/false)的属性

选中时,我想检查,如果用户已登录,如果未登录,则重定向到具有推荐人的登录页面

但是最好的方法是什么呢?我不想把它放在我的主模板中。如何连接到请求管道,检查“membersOnly”字段是否存在,如果存在,并且已检查,并且用户未登录,则重定向用户

有什么小片段吗


此外,我也知道Umbraco内置的方法。但在这种情况下,我需要它只是后端页面上的一个简单复选框-但它激发的功能基本相同,就像我在后端使用内置的Umbraco方式一样。

您可以使用路由劫持然后通过控制器检查身份验证来实现这一点。然而,如果您所要做的只是检查身份验证,那么对您的文档类型执行路由劫持可能有点过分

本质上,要执行路由劫持,您需要创建一个与doctype同名的控制器,因此,如果doctype为“memberPage”,则控制器的外观如下所示:

public class MemberPageController : RenderMvcController
{
    public ActionResult Index(RenderModel model)
    {
        return base.Index(model);
    }
}
请注意,它必须继承RenderMvcController才能工作

在返回基本RenderMvcController方法“Index”之前,您现在可以运行代码,例如检查身份验证

所以你可以这样做:

    public ActionResult Index(RenderModel model)
    {
        if (Members.IsLoggedIn())
        {
            return base.Index(model);
        }
        else
        {
            return Redirect("~/");
        }
    }

要自己实现这一点,最干净的方法可能是创建一个从
授权派生的自定义过滤器​滤器​属性(位于系统中)。​网状物​Http。​过滤器

让派生对象使用umbracocontext并基于当前页面查询设置


Umbraco对其自定义验证也做了完全相同的操作,为了获得一些灵感,请查看

我实际上认为只使用内置的方式进行验证会更容易:-/但是您可以随时查看Umbraco的源代码,看看他们是如何进行验证的,我想。。。