gpt4 book ai didi

c# - OnAuthorization 中的 MVC 重定向导致授权失败

转载 作者:太空狗 更新时间:2023-10-29 23:33:05 25 4
gpt4 key购买 nike

如果用户的电子邮件地址尚未经过验证,我会尝试将用户重定向到不同的操作。问题是,我不想让他们注销,我只想重定向他们。当我在 Controller 的 OnAuthorization 中执行此操作时,它会按预期重定向,但用户未通过身份验证。我不确定这是为什么。我的代码如下所示:

    protected override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);

//_applicationService.CurrentUser is populated correctly at this point
// from Controller.User
if (_applicationService.CurrentUser != null)
{
if (_applicationService.CurrentUser.EmailVerified != true)
{
var url = new UrlHelper(filterContext.RequestContext);
var verifyEmailUrl = url.Action("EmailVerificationRequired", "Account", null);
filterContext.Result = new RedirectResult(verifyEmailUrl);
}
}

}

注意:我删除了不必要的代码以使其更清晰。 _applicationService.CurrentUser 由当前用户填充 - 并且用户在到达该点时已正确通过身份验证。但在重定向之后,用户不再经过身份验证。

如何在不影响内置用户授权的情况下实现此重定向?

我已经尝试将我的代码放入 OnActionExecuting 中,并且我也尝试过在自定义 ActionFilterAttribute 中实现它,但是无论我把这个重定向放在什么地方它都会阻止“用户”(即:System.Security.Principal。 IPrincipal Controller.User) 从获得身份验证。

我在这里错过了什么?希望这是有道理的。非常感谢任何帮助。

响应 Darin 对我的登录操作的请求:

    [HttpPost]
[AllowAnonymous]
public ActionResult Login(LoginViewModel model, string returnUrl)
{
string errorMessage = "The username or password is incorrect";

if (ModelState.IsValid)
{
if (_contextExecutor.ExecuteContextForModel<LoginContextModel, bool>(new LoginContextModel(){
LoginViewModel = model
}))
{
ViewBag.CurrentUser = _applicationService.CurrentUser;
_formsAuthenticationService.SetAuthCookie(model.LoginEmailAddress, model.RememberMe);

if (_applicationService.IsLocalUrl(returnUrl))
{
return Redirect(returnUrl);
}

return RedirectToAction("Index", "Home").Success("Thank you for logging in.");
}
else
{
errorMessage = "Email address not found or invalid password.";
}
}

return View(model).Error(errorMessage);
}

最佳答案

好吧,我现在已经找到我哪里出错了。问题是我有点像个傻瓜,我在做的时候没有完全理解发生了什么:

filterContext.Result = new RedirectResult(verifyEmailUrl);

我没有意识到我实际上是在用这个开始一个新的请求,我误以为我只是重定向到另一个 Action 。现在看来很明显这将是一个新请求。

所以,问题是我的 EmailVerificationRequired 操作没有授权用户,因此当它到达这个操作时,当前用户为空。所以修复是为该操作添加授权,现在一切正常。

感谢您的帮助。

关于c# - OnAuthorization 中的 MVC 重定向导致授权失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12481095/

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