“用户登录”期间的密码更改 Orchard CMS 工作流在工作流完成并进行身份验证时不会反映出来

问题描述

在工作流程中更新用户密码时遇到一些问题,第一个状态是“用户登录”。我使用的是 Orchard CMS 1.10.2。

让我稍微解释一下这个场景。我已经设置了这个工作流,我希望用户首先通过我在工作流中使用 HTTPRequest 活动调用的外部 Web 服务进行身份验证。如果成功并且是用户第一次登录 Orchard 站点,则用户将在 Orchard 中创建。如果用户认证成功并且已经存在于 Orchard 中,则工作流程将继续并继续执行 Orchard 的用户认证程序。我有一个场景,用户在外部系统中更改了密码,但旧密码保留在 Orchard 中。我想在用户通过 HTTPRequest 活动的工作流中的外部网络服务成功通过身份验证后更新 Orchard 中的密码。

以下是“logon”操作,包含在 Orchard.Users 的 AccountController 中的 Orchard CMS 源代码中:


[HttpPost]
[AlwaysAccessible]
[ValidateInput(false)]
[SuppressMessage("Microsoft.Design","CA1054:UriParameteRSShouldNotBeStrings",Justification = "Needs to take same parameter type as Controller.Redirect()")]
public ActionResult logon(string userNameOrEmail,string password,string returnUrl,bool rememberMe = false) {
    _userEventHandler.LoggingIn(userNameOrEmail,password);

    var user = Validatelogon(userNameOrEmail,password);
    if (!ModelState.IsValid) {
        var shape = _orchardServices.New.logon().Title(T("Log On").Text);
        return new ShapeResult(this,shape); 
    }

    _authenticationService.SignIn(user,rememberMe);
    _userEventHandler.LoggedIn(user);

    return this.RedirectLocal(returnUrl);
}

我的理解是,一旦执行了 _userEventHandler.LoggingIn(userNameOrEmail,password); 行,就会启动带有“用户登录”的工作流。在 Workflow 中,启动了一个 HTTPRequest Activity,它执行以下代码

[HttpPost]
public void ExternalWebServiceAuthentication(string p_UserName,string p_Password)
{
    //A webservice is called and authenticates the provided username and password
    var authenticated = externalWS.Authenticate(p_Username,p_Password);
    if (authenticated)
    {
        var actUser = _membershipService.GetUser(p_UserName);
        if (actUser != null)
        {
            _membershipService.SetPassword(actUser,p_Password);
        }
    }
}

密码修改成功,没有收到错误信息。为确保这一点,我检查了“actUser”变量中的密码和盐值,更改已受到影响。到目前为止一切顺利。

回到上面提到的“logon函数,执行的下一行是var user = Validatelogon(userNameOrEmail,password);。尽管在 HTTPRequest Activity 中成功更改了密码,但似乎在 Validatelogon 函数中对用户名/密码进行身份验证时,它使用了旧存储的用户密码,从而导致身份验证错误

基本上总结一下,调用 Validatelogon(userNameOrEmail,password); 时似乎没有反映在 Workflow 中对密码所做的更改。请记住,当 Orchard 中的身份验证第一次失败时,当我再次尝试登录时,它按预期工作,这意味着它似乎第二次检索到更改后的密码。

会不会是对密码的修改还没有提交到数据库?有没有办法在退出工作流之前强制刷新对用户密码所做的更改?有没有办法强制 Validatelogon(userNameOrEmail,password); 始终获取最新密码?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...