WebAuthenticator 总是跳过登录页面,如何为新用户获取新的登录表单?
Posted
技术标签:
【中文标题】WebAuthenticator 总是跳过登录页面,如何为新用户获取新的登录表单?【英文标题】:WebAuthenticator always skip login page, How to get new login form for new user? 【发布时间】:2021-11-01 12:41:18 【问题描述】:WebAuthenticator 总是跳过登录页面,如何每次为新用户获取新登录。
【问题讨论】:
【参考方案1】:您可以添加退出方法。我们检查了 MSAL 为我们在本地缓存的所有可用帐户并将它们注销。我们还会清除登录时存储在安全存储中的访问令牌。
public async Task<bool> SignOutAsync()
try
var accounts = await _pca.GetAccountsAsync();
// Go through all accounts and remove them.
while (accounts.Any())
await _pca.RemoveAsync(accounts.FirstOrDefault());
accounts = await _pca.GetAccountsAsync(); //The _pca is the PublicClientApplicationBuilder
// Clear our access token from secure storage.
SecureStorage.Remove("AccessToken");
return true;
catch (Exception ex)
Debug.WriteLine(ex.ToString());
return false;
更新:登录
public async Task<bool> SignInAsync()
try
var accounts = await _pca.GetAccountsAsync();
var firstAccount = accounts.FirstOrDefault();
var authResult = await _pca.AcquireTokenSilent(Scopes, firstAccount).ExecuteAsync();
// Store the access token securely for later use.
await SecureStorage.SetAsync("AccessToken", authResult?.AccessToken);
return true;
catch (MsalUiRequiredException)
try
// This means we need to login again through the MSAL window.
var authResult = await _pca.AcquireTokenInteractive(Scopes)
.WithParentActivityOrWindow(ParentWindow)
.ExecuteAsync();
// Store the access token securely for later use.
await SecureStorage.SetAsync("AccessToken", authResult?.AccessToken);
return true;
catch (Exception ex2)
Debug.WriteLine(ex2.ToString());
return false;
catch (Exception ex)
Debug.WriteLine(ex.ToString());
return false;
【讨论】:
Google 身份验证成功后,我实现了 SecureStorage.Remove("AccessToken")。它仍然默认选择电子邮件,而不是第二次询问电子邮件。 SecureStorage.Remove("AccessToken") 基本上不起作用。 通常情况下,MSAL 已经缓存了您的授权,如果仍然有效,您可以静默登录。但是,如果我们的授权不再被缓存,用户会看到一个登录对话框来完成该过程。请检查符号方法的 mu 更新。以上是关于WebAuthenticator 总是跳过登录页面,如何为新用户获取新的登录表单?的主要内容,如果未能解决你的问题,请参考以下文章
WebAuthenticator -> 您必须继承 WebAuthenticatorCallbackActivity 并为其创建一个与您的 callbackUrl 匹配的 IntentFilte