gpt4 book ai didi

c# - Umbraco 的成员(member)提供者

转载 作者:太空狗 更新时间:2023-10-29 21:45:41 25 4
gpt4 key购买 nike

我正在尝试创建一个自定义成员资格提供程序,以向 Umbraco 之外的现有数据库验证 Umbraco 中的用户。从我目前所学的情况来看,创建一个继承自 umbraco.providers.members.UmbracoMembershipProvider 并覆盖 ValidateUser() 函数 的类应该不会有太多工作要做.

我想知道的是,如果我希望将此类包含到我的 Umbraco 项目中,而不是在 web.config 文件中指定它,我应该怎么做?是否可以在不重新编译源代码的情况下以这种方式扩展 Umbraco?

编辑 - 我在 http://marcus-abrahamsson.se/post/Membership-Provider-in-Umbraco 上写了一篇关于如何实现它的文章

最佳答案

您可以创建和构建自己的模块,然后将 .dll 复制到 Umbraco 安装的 bin 文件夹中。无需重新编译 Umbraco 本身。

我有一个非常相似的问题,但可能要求较小。我试图实现 Umbraco TV 视频中描述的“上次登录”功能,以显示成员的上次登录日期。由于代码库已更改,所描述的方法不再有效。我发现有 2 种通用方法可以让它工作:

创建您自己的成员(member)资格提供商。从 UmbracoMembershipProvider 继承并更新网络配置以使用您的提供者。我覆盖了一种方法,我的提供商代码如下所示:

using umbraco.BusinessLogic;
using System.Web.Profile;
using System;

namespace zo.Umb.LastLogin
{
// this approac works, and it may be necessary to extend the membership provider in the future, so that's why I'm
// leaving it here. But for now I'm using the ApplicationStartupHandler event subscription method
// in MemberEvent.cs


/// <summary>
/// Inherit the default membership provider and substitute my own method that's fired when a member tries
/// to log in. Note that you must also replace the UmbracoMembershipProvider reference in the web.config
/// with a reference to this one. eg:
/// <add name="UmbracoMembershipProvider" type="zo.Umb.LastLogin.MyMembershipProvider" enablePasswordRetrieval="false" enablePasswordReset="false" requiresQuestionAndAnswer="false" defaultMemberTypeAlias="Another Type" passwordFormat="Hashed" />
///
/// also note that, to have custom profile properties appear, they must also be added in the web.config
/// like so:
/// <profile defaultProvider="UmbracoMemberProfileProvider" enabled="true">
/// <providers>
/// <clear />
/// <add name="UmbracoMemberProfileProvider" type="umbraco.providers.members.UmbracoProfileProvider, umbraco.providers" />
/// </providers>
/// <properties>
/// <clear />
/// <add name="lastLogin" allowAnonymous ="false" provider="UmbracoMemberProfileProvider" type="System.DateTime" />
/// </properties>
///</profile>

/// </summary>
public class MyMembershipProvider : umbraco.providers.members.UmbracoMembershipProvider
{
public override bool ValidateUser(string username, string password)
{
var success = base.ValidateUser(username, password);
if (success)
{
var user = GetUser(username, true);
var profile = ProfileBase.Create(user.UserName);
profile["lastLogin"] = DateTime.Now;
profile.Save();
}
return success;
}
}
}

当用户尝试获取 protected 内容时,将触发 ValidateUser。

请注意,您现在必须更新 web.config 以指向您的自定义成员资格提供商。

虽然这行得通,但我不喜欢离开默认提供程序、编辑 web.config 等,而是想使用以前版本的更“标准”的方法。所以我使用了方法二:

连接到 ApplicationStartupHandler,并订阅 Member.BeforeSave

using System;
//using umbraco.BusinessLogic;
using umbraco.businesslogic;
using umbraco.cms.businesslogic.member;

namespace zo.Umb.LastLogin
{
public class MemberEvent : ApplicationStartupHandler
{
public MemberEvent()
{
Member.BeforeSave += new Member.SaveEventHandler(Member_BeforeSave);
}

void Member_BeforeSave(Member sender, umbraco.cms.businesslogic.SaveEventArgs e)
{
//Log.Add(LogTypes.Debug, sender.Id, "Member_AfterAddToCache");
sender.getProperty("lastLogin").Value = DateTime.Now;
}
}
}

如果我记得,member.beforesave 不是在创建用户并将其保存到成员(member)商店时触发的东西;它实际上是在用户登录时触发的。

关于c# - Umbraco 的成员(member)提供者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13492502/

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