【问题标题】:Validate Umbraco Back Office Users programmatically以编程方式验证 Umbraco 后台用户
【发布时间】:2018-08-07 15:24:26
【问题描述】:

我是 umbraco 的新手,目前面临以下问题。

我需要使用用户输入的用户名和密码来验证 SurfaceController 中是否存在 umbraco 后台用户(umbracoUser 表中的用户),这就是我目前所做的。

var result = new Umbraco.Web.Security.Providers.UsersMembershipProvider().ValidateUser(username, password);

当我使用上述语句验证现有用户名和正确密码时,它总是返回 false 并通过将 DateTime 值设置为 lastLockoutDate 列和 umbracoUser 表中的 userNoConsole = 1 来锁定用户。

也查看了下面的帖子,但没有帮助。

https://our.umbraco.com/forum/umbraco-cloud/76499-umbraco-7-user-login-backoffice-programmatically

任何有关如何以编程方式验证后台用户是否存在的指南都会有很大帮助。

【问题讨论】:

  • 您想简单地检查用户是否存在吗?还是要自动让用户登录?
  • 我找到了一种解决方法来检查用户是否存在,但是否可以通过编程方式自动记录后台用户?

标签: c# umbraco umbraco7 surface-controller


【解决方案1】:

我找到了一种通过以下代码成功验证后台用户的方法。

在 Web.config 中,我找到了后台会员提供商信息。

<add name="UsersMembershipProvider"
             type="Umbraco.Web.Security.Providers.UsersMembershipProvider, Umbraco" 
             minRequiredNonalphanumericCharacters="0" 
             minRequiredPasswordLength="10" 
             useLegacyEncoding="false" 
             enablePasswordRetrieval="false" 
             enablePasswordReset="true" 
             requiresQuestionAndAnswer="false" 
             passwordFormat="Hashed" 
             allowManuallyChangingPassword="false" />

所以,我使用会员提供商名称并执行以下操作来验证后台用户,

public bool ValidateUser(string username, string password)
        {
            try
            {

                var provider = Membership.Providers["UsersMembershipProvider"];     // from web.config 

                if (provider != null)
                {                                           
                    var validUser = provider.ValidateUser(username, password)
                        ? Task.FromResult(BackOfficeUserPasswordCheckerResult.ValidCredentials)
                        : Task.FromResult(BackOfficeUserPasswordCheckerResult.InvalidCredentials);
                    return validUser.Result == BackOfficeUserPasswordCheckerResult.ValidCredentials;
                }
                return false;
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }
        }

以上验证后台用户是否存在返回true。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-21
    • 1970-01-01
    • 2019-01-02
    • 1970-01-01
    • 2016-04-21
    • 1970-01-01
    • 2017-08-03
    • 2017-08-15
    相关资源
    最近更新 更多