Piranha CMS - 登录问题

Posted

技术标签:

【中文标题】Piranha CMS - 登录问题【英文标题】:Piranha CMS - Login issue 【发布时间】:2016-02-20 01:57:02 【问题描述】:

我刚刚将 Piranha CMS 添加到现有的 ASP.NET MVC 5 站点,但遇到了一个奇怪的问题。

如果我登录到该站点,然后尝试访问 site.com/manager 并输入食人鱼登录详细信息,则页面只是刷新并且没有任何反应(尝试使用不正确的密码会给我一个不正确的密码消息,但正确的登录详细信息只是刷新页面)

如果我尝试在未登录站点的情况下访问 site.com/manager,那么它会将我登录到 OK the piranha manager area。

有什么想法吗?理想情况下,我希望用户只需要登录一次,这可能吗?

【问题讨论】:

【参考方案1】:

当前版本的 Piranha CMS 未与其他身份验证集成。目前唯一的解决方案是像您注意到的那样将用户帐户分开。然而,这个功能已经计划了几年,但由于各种原因一直没有实现。

取消身份验证机制会对数据库架构进行大量更改并且使得为特定页面设置用户权限变得更加困难。

问候

哈坎

【讨论】:

我遇到了同样的问题,但不清楚如何解决。为了简化,我使用带有身份验证的干净 MVC 模板,然后按照现有网站的入门文档安装带有 nuget 的 CMS。那么,我该怎么做或在哪里阅读如何使网站像最终用户一样工作,并且让 CMS 与这个登录问题并排工作?谢谢。【参考方案2】:

我发现可以通过对 Piranha 用户类的处理稍作更改来支持 FormsIdentity 和 ClaimsIdentity。我已经在 Piranah GitHub 问题日志上发布了修复程序 - 我确信它会在未来的构建中包含,但您可能想尝试修复程序。通过这个更改,我可以支持 MVC4/5 和 Piranha(以及 HTTPS)。

我在我的应用程序中使用 OWIN 身份管理,并且从我的应用程序切换到管理器正确要求我登录(Piranha 使用表单)。这不是问题,我对应用程序用户和内容管理员之间需要单独登录没有任何问题。

我注意到 Https 下的一个问题,LocalUserProvider 类期望从 HttpContent.Current.User.Identity 获取 FormsIdentity,但在许多情况下它获取的是 ClaimsIdentity。这导致它拒绝登录并继续循环登录表单。

我在本地修改了LocalUserProvider添加如下方法;

 /// <summary>
        /// Piranha explicitly uses FormsAuthentication - this method is used to replace a calls to HttpContext.Current.User.Identity in this 
        /// module which would ordinarily return the users Idenity as an ClaimsIdentity, and the Name part of the ClaimsIdentity is the login name
        /// not the Forms Authentication Guid expected by Piranha. The OWIN and Forms can co-exist side by side, but when Piranha gets the users
        /// identity, it expects to get a Forms Identity.
        /// </summary>
        /// <returns></returns>
        private System.Web.Security.FormsIdentity extractFormsIdentityFromHttpContext()
        
            if (HttpContext.Current.User != null)
            
                System.Security.Claims.ClaimsPrincipal claimsPrincipal = HttpContext.Current.User as System.Security.Claims.ClaimsPrincipal;
                if(claimsPrincipal != null)
                
                    return claimsPrincipal.Identities.OfType<System.Web.Security.FormsIdentity>().FirstOrDefault();
                
            
            return null;
        

并像这样使用它;

/// <summary>
        /// Gets if the current user is authenticated.
        /// </summary>
        public bool IsAuthenticated 
            get 
                System.Security.Principal.IIdentity formsIdentity = extractFormsIdentityFromHttpContext();
                if (formsIdentity != null && formsIdentity.IsAuthenticated) 
                    try 
                        // Check if this user has a Guid id.
                        var id = new Guid(formsIdentity.Name);
                        return true;
                     catch  
                
                return false;
            
        

这意味着 LocalUserProvider 将始终显式处理上下文 FormsIdentity 并具有允许经理登录在 https 下工作的快乐副作用。

希望它是一个有用的建议

【讨论】:

您至少应该发布指向问题日志的链接,您指的是。更好的是修复,因为链接可能会变得无效:)

以上是关于Piranha CMS - 登录问题的主要内容,如果未能解决你的问题,请参考以下文章

现有 MVC 5 站点上的 Piranha CMS

有人可以解释 Piranha.vNext CMS 中的“块”概念吗?

Piranha CMS - UseManager 违反 CORS 政策

无法使 Piranha CMS 管理器编辑页面正常工作

piranha CMS 的 Sysparam 错误

Piranha CMS 和 Azure 存储