.net core 使用Identity时,用户无法注销

瑾安 2020-04-24 03:16:35
使用SignInManager来控制用户的登录、注销等动作;
其中登录功能正常,在使用SignOutAsync注销用户时一直无效,但又没有任何异常抛出,请大神帮忙看下,代码如下:

/// <summary>
/// 登录
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
[HttpPost, Route("Account/Login")]
public JsonResult LoginAsync(LoginModel model)
{
BaseResult result = new BaseResult();

var signInResult = Login(model.UserName, model.Password, model.RemenberMe);
if (signInResult.IsNotAllowed)//账号未启用
{
result.ResultCode = Resources.Tips.LoginTips.SignInUserNotAllowedCode;
result.ResultMsg = Resources.Tips.LoginTips.SignInUserNotAllowedMsg;
}
else if (signInResult.IsLockedOut)//账号被锁定
{
result.ResultCode = Resources.Tips.LoginTips.SignInUserLockedCode;
result.ResultMsg = Resources.Tips.LoginTips.SignInUserLockedMsg;
}
else if (!signInResult.Succeeded)
{
result.ResultCode = Resources.Tips.LoginTips.SignInPasswordOrUserNameErrorCode;
result.ResultMsg = Resources.Tips.LoginTips.SignInPasswordOrUserNameErrorMsg;
}
if(result.ResultCode == CommonTips.CommonObjectSuccessCode)
{
LogService.WriteLog(model.UserName, ValueHelper.NowTime + ",IP:" + HttpContext.GetClientUserIp(), "成功", "登录", "账户管理");
}
else
{
LogService.WriteLog(model.UserName, ValueHelper.NowTime + ",IP:" + HttpContext.GetClientUserIp() + result.ResultMsg, "失败", "登录", "账户管理");
}
return Json(result);
}

// <summary>
/// 注销
/// </summary>
[Route("Account/Logout")]
public IActionResult LogoutAsync()
{
string userId = HttpContext.GetUserId();
Logout();
LogService.WriteLog(userId, ValueHelper.NowTime + ",IP:" + HttpContext.GetClientUserIp(), "成功", "注销", "账户管理");
return RedirectToAction("Index");
}

/// <summary>
/// 登录
/// </summary>
/// <param name="username"></param>
/// <param name="pwd"></param>
/// <returns></returns>
public SignInResult Login(string username, string pwd, bool remenberMe)
{
return SignInManager.PasswordSignInAsync(username, pwd, remenberMe, false).Result;
}

/// <summary>
/// 注销
/// </summary>
/// <returns></returns>
public async void Logout()
{
await SignInManager.SignOutAsync();
}
...全文
268 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
瑾安 2021-03-17
  • 打赏
  • 举报
回复
感谢各位,问题已经解决,问题出在异步方法执行上,因为调用了异步注销方法之后又做了重定向,导致注销未执行完就跳转到登录页面,登录页面检查状态为登录之后又重新跳转回本页,看起来跟未注销一样。
_作孽 2020-05-22
  • 打赏
  • 举报
回复
注销 await Request.HttpContext.SignOutAsync(); return RedirectToAction("Login");
EdsionWang 2020-05-18
  • 打赏
  • 举报
回复
你退出代码中加的日志是否正常输出了?如果输出了,说明注销代码执行了
hkstb 2020-05-18
  • 打赏
  • 举报
回复
identity中退出是需要在form表单中的,它是需要Token验证的。 Views页面:

<form asp-area="" asp-controller="Account" asp-action="Logout" method="post" id="logoutForm">
    <div class="yr-manage-top-nav">
        <ul>
            <li>您好!@getUser.ChineseName</li>
            <li><button type="submit" class="btn btn-manage-nav btn-lockout">退出系统</button></li>
        </ul>
    </div>
Controllers中AccountController.cs

        [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> Logout()
        {
            await _signInManager.SignOutAsync();
            _logger.LogInformation("User logged out.");
            return RedirectToAction(nameof(HomeController.Index), "Home");
        }
瑾安 2020-04-24
  • 打赏
  • 举报
回复
问题可能出现在重定向上....

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧