问题描述
在工作流程中更新用户密码时遇到一些问题,第一个状态是“用户登录”。我使用的是 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 (将#修改为@)