并希望将我自己的系统登录工具集成到Umbraco 7(WinForms而不是MVC)中,但同时使用当前的Umbraco登录工具允许管理员人员像往常一样登录Umbraco并进行更改。
当我说自己的系统时,我指的是我们创建的网站,其中包含用户帐户,当他们注册时(这是使用.Net 2.0构建的)。
我已经搜索了Umbraco,所以一切似乎都紧密集成在一起,想知道是否有人有办法实现这一目标?
方法可以自定义Umbraco的内置MemberShip,请在此处阅读更多相关信息:http://24days.in/umbraco-cms/2015/extending-membership/
尽管如此,通过您的问题,您希望对 Umbraco 中的用户而不是会员进行更改。
就我而言,"用户"与Umbraco紧密集成在一起,尽管如此,您可以使用UserService。在此处阅读更多内容:http://programystic.com/code/umbraco/create-a-new-umbraco-user-programmatically-on-startup-when-locked-out/
从技术上讲,您可以确保您的WinForms用户始终与您的Umbraco用户保持同步。当您的WinForms用户进行更新时,请确保WinForms调用Umbraco站点上的API,该API将数据与Umbraco用户同步。
这可能不是理想的解决方案,但它可以作为一种解决方法。
我编写了一个ActiveDirectory解决方案,更改:Umbraco.Web\Security\WebSecurity.cs,您可以使用从主机获得的任何内容。我使用活动目录身份验证。我为成员和用户开发了一个HybridMemberProvider。它的Umbraco 7.5.5.,对于ActiveDirectory,你需要在提供程序中更改密码检查,因为ActiveDirectory中的密码检查被委托给Windows。
/// <summary>
/// Ensures that a back office user is logged in
/// </summary>
/// <returns></returns>
public bool IsAuthenticated()
{
bool isAuthenticated = false;
if (_httpContext.User.Identity.IsAuthenticated)
{
// user is already authenticated in umbraco.
if (_httpContext.GetCurrentIdentity(false) != null)
isAuthenticated = true;
// check user in umbraco, and if found set as authenticated.
else
{
// active directory username.
var userName = _httpContext.User.Identity.Name.Replace("MOD\", string.Empty);
var result = SignInManager.PasswordSignInAsync(userName, string.Empty, isPersistent: true, shouldLockout: true).Result;
if (result == SignInStatus.Success)
{
// log this user in backoffice.
var user = GetBackOfficeUser(_httpContext.User.Identity.Name.Replace("MOD\", string.Empty));
PerformLogin(user.Id);
// and set as authenticated.
isAuthenticated = true;
}
}
}
//return _httpContext.User.Identity.IsAuthenticated && _httpContext.GetCurrentIdentity(false) != null;
return isAuthenticated;
}