在使用 BotAuth 时,注销现有登录用户的正确方法是什么?在 AuthBot ,这是使用 await context.Logout();
完成的。
关于 BotAuth code ,我发现以下代码执行注销,但它未在任何示例中显示。
public async Task Logout(AuthenticationOptions authOptions, IDialogContext context)
{
context.UserData.RemoveValue($"{this.Name}{ContextConstants.AuthResultKey}");
context.UserData.RemoveValue($"{this.Name}{ContextConstants.MagicNumberKey}");
context.UserData.RemoveValue($"{this.Name}{ContextConstants.MagicNumberValidated}");
string signoutURl = "https://login.microsoftonline.com/common/oauth2/logout?post_logout_redirect_uri=" + System.Net.WebUtility.UrlEncode(authOptions.RedirectUrl);
await context.PostAsync($"In order to finish the sign out, please click at this [link]({signoutURl}).");
}
最佳答案
我发现在我执行注销操作后,返回 URL 将是 http://localhost:3979/Callback
(没有任何查询字符串),在 the source code of botauth 中,我发现它直接返回了状态为 BadRequest 的异常:
[HttpGet]
[Route("Callback")]
public async Task<HttpResponseMessage> Callback()
{
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, new Exception());
}
我做了一个测试,用下面的代码修改这个 Callback
,它在我这边按预期工作。
[HttpGet]
[Route("Callback")]
public async Task<HttpResponseMessage> Callback()
{
//return Request.CreateErrorResponse(HttpStatusCode.BadRequest, new Exception());
var resp = new HttpResponseMessage(HttpStatusCode.OK);
resp.Content = new StringContent("<html><body>Logout success</body></html>", System.Text.Encoding.UTF8, @"text/html");
return resp;
}
测试结果:
关于c# - 使用 BotAuth 时如何正确注销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48116847/