我刚刚开始使用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
中看到它呢?
答案 0 :(得分:0)
好的,我解决了丢失的ASPXAUTH cookie部分。我必须匹配原始项目中的machineKey
条目和我的Umbraco项目。我想如果它不能解码cookie,那么它就会被忽略。
现在是这样一个事实,即存在一个能够用我的机器密钥解码的cookie足以确认用户已登录?对于Umbraco方面,我绝对不在乎谁已登录,只是他们已登录。