Umbraco从其他网站

时间:2017-11-13 16:32:59

标签: c# umbraco

我刚刚开始使用Umbraco,我的想法是建立一个网站(在Umbraco下运行),并提供另一个网站的文档。但要求是您无法在文档站点上看到任何内容,除非您已在主站点登录。

因此,在我的主站点上,当您登录时,您将获得.ASPXAUTH cookie。我需要在Umbraco方面做些什么才能阅读并检查它的有效性(实际上,知道cookie中嵌入的数据,例如用户的身份现在实际上并不重要),如果无效(或者它不应该重定向到主站点进行登录(我不想在Umbraco中重新创建相同的登录过程)。

接近这个的正确方法是什么?我已经看到了在Umbraco中创建MembershipProvdier的链接,但我不想重新创建整个事物。我只需要知道你有cookie,它是由主站点创建的一个有效的。

我可以将两个网站放在同一个域上,所以我真正需要Umbraco方面做的就是读取cookie并确认它是有效的,只有在真实的情况下才会显示某个内容页面。我可以创建自己的MembershipProvider,让我实现ValidateUser,但我需要尽快挂钩过程。我需要勾选Umbraco决定用户是否登录的地方。

编辑:我可能会在这方面取得一些进展,但我不是那里。我创建了一个继承自RenderMvcController并添加了自定义AuthorizeAttribute

的控制器
public class CustomUmbracoDefaultController : Umbraco.Web.Mvc.RenderMvcController
{
    [TestAuthorize]
    public override ActionResult Index(RenderModel model)
    {
        return base.Index(model);
    }
}

public class TestAuthorizeAttribute : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        return base.AuthorizeCore(httpContext);
    }
}

我添加了一个启动处理程序来设置默认控制器类型:

public class StartupHandler : ApplicationEventHandler
{
    protected override void ApplicationStarting(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext)
    {
        DefaultRenderMvcControllerResolver.Current.SetDefaultControllerType(typeof(Controller.CustomUmbracoDefaultController));
    }
}

然后在设置中:

<authentication mode="Forms">
  <forms loginUrl="http://localhost:6550/account/Login" protection="All" path="/" />
</authentication>

localhost:6550是我的其他应用程序(实际登录的应用程序)。

当我启动我的Umbraco应用程序(http://localhost:7539)时,它会重定向到登录页面(太棒了!)但是在登录并获得.ASPXAUTH任何尝试返回localhost:7539之后仍然会将我重定向回登录页面。

那么我还缺少什么?我在哪里可以看到.ASPXAUTH cookie并接受它?

编辑:为了好玩我尝试了这个:

protected override bool AuthorizeCore(HttpContextBase httpContext)
{
    var cookie = httpContext.Request.Cookies[".ASPXAUTH"];
    if (cookie == null)
    {
        return base.AuthorizeCore(httpContext);
    }
    return true;
}

当我第一次进入cookie时,按预期为空,您将被踢到登录页面(在不同的端口上)。登录后,我可以看到.ASPXAUTH cookie已设置(仍在端口6550上)。当我把Umbraco的端口重新插入时,当它到达AuthorizeCore时,.ASPXAUTH cookie仍为空?因此它将再次循环回登录页面。如果我跳过空检查并返回true,我的Umbraco页面加载并查看我的浏览器,我可以看到.ASPXAUTH cookie就在那里。那么为什么我不能在AuthorizeCore中看到它呢?

1 个答案:

答案 0 :(得分:0)

好的,我解决了丢失的ASPXAUTH cookie部分。我必须匹配原始项目中的machineKey条目和我的Umbraco项目。我想如果它不能解码cookie,那么它就会被忽略。

现在是这样一个事实,即存在一个能够用我的机器密钥解码的cookie足以确认用户已登录?对于Umbraco方面,我绝对不在乎已登录,只是他们已登录。