用户信息彻底注销java_为什么最终用户必须注销两次?

在 Account/Logout 页面中,它位于您的脚手架ASP.NET核心标识代码中的 Areas/Identity/Account/Logout.cshtml.cs 下,有一个 OnGet 处理程序,如下所示:

public void OnGet() { }

因为这是使用ASP.NET Core Razor Pages,所以这一切都是渲染相应的 Logout.cshtml 页面 . 在您的示例中,当您在MVC应用程序中点击 Logout 时,它会清除自己的cookie,然后将您转到IS4应用程序(具体为 OnGet ) . 因为这个 OnGet 处理程序是空的,所以's not really doing anything and it'肯定不会让你退出IS4应用程序 .

如果你看一下 Logout.cshtml.cs 里面的 OnPost 处理程序,你会发现它看起来像这样:

public async Task OnPost(string returnUrl = null)

{

await _signInManager.SignOutAsync();

// ...

}

这个对 SignOutAsync 的调用完全符合它的建议:它会让你退出IS4本身 . 但是,在当前工作流程中,未调用此 OnPost 处理程序 . 正如我已经提到的那样,当您在MVC应用程序中使用 Logout 时,会间接调用 OnGet 处理程序 .

现在,如果您查看Quickstart.UI项目中IS4注销的控制器/操作实现,您将看到它基本上将 GET 请求传递给 POST 请求 . 这是代码,删除了注释:

[HttpGet]

public async Task Logout(string logoutId)

{

var vm = await BuildLogoutViewModelAsync(logoutId);

if (vm.ShowLogoutPrompt == false)

return await Logout(vm);

return View(vm);

}

当注销时,主要是这个代码正在处理的事情 - 如果不需要提示,它会直接传递给 POST 请求处理程序 . 这是 POST 的代码片段:

[HttpPost]

[ValidateAntiForgeryToken]

public async Task Logout(LogoutInputModel model)

{

var vm = await BuildLoggedOutViewModelAsync(model.LogoutId);

if (User?.Identity.IsAuthenticated == true)

{

await HttpContext.SignOutAsync();

// ...

}

// ...

return View("LoggedOut", vm);

}

这里的重要一行是对 HttpContext.SignOutAsync 的调用 - 这最终会删除IS4用来保持登录的cookie . 一旦删除,你就会退出IS4 . 最终,这是您当前实施中缺少的内容 .

在最简单的级别,您可以通过更新 OnGet 来解决您的问题,如下所示:

public async Task OnGet()

{

if (User?.Identity.IsAuthenticated == true)

{

await _signInManager.SignOutAsync();

return RedirectToPage(); // A redirect ensures that the cookies has gone.

}

return Page();

}

这不支持 ShowLogoutPrompt 选项我只是使用 _signInManager 来执行注销,因为您处于ASP.NET核心身份世界中 .

我鼓励你从Quickstart.UI实现中探索完整的源代码,以便支持 ShowLogoutPrompt , returnUrl 等 - 如果不写书,我不可能在这里做 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值