gpt4 book ai didi

c# - Umbraco 从另一个站点登录

转载 作者:行者123 更新时间:2023-11-30 18:16:00 26 4
gpt4 key购买 nike

我刚刚开始使用 Umbraco,我的想法是拥有一个站点(在 Umbraco 下运行),其中包含另一个站点的文档。但要求是您不能在文档站点上看到任何内容,除非您已在主站点登录。

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

处理此问题的正确方法是什么?我已经看到有关在 Umbraco 中创建 MembershipProvdier 的链接,但我不想重新创建整个内容。我只需要知道您有 cookie,并且它是由主站点创建的合法 cookie。

我可以将两个站点放在同一个域中,所以我真正需要 Umbraco 端做的就是读取 cookie 并确认它是有效的,如果是这样,则只显示特定页面的内容。我可以创建自己的 MembershipProvider 来实现 ValidateUser,但我需要尽快 Hook 该过程。我需要连接到 Umbraco 决定用户是否登录的地方。

编辑:我可能在这方面取得了一些进展,但还不够。我创建了一个继承自 RenderMvcController 的 Controller 并添加了一个自定义 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);
}
}

然后我添加了一个启动处理程序来设置默认 Controller 类型:

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 仍然为空?所以它会再次循环回到登录页面。如果我跳过 null 检查并只返回 true,我的 Umbraco 页面加载并在我的浏览器中查看我可以看到 .ASPXAUTH cookie 在那里。那么为什么我在 AuthorizeCore 中看不到它呢?

最佳答案

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

那么现在是否存在能够用我的机器 key 解码的 cookie 足以确认用户已登录的事实?对于 Umbraco 方面,我绝对不关心登录了,只关心他们登录了。

关于c# - Umbraco 从另一个站点登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47269161/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com