Dan*_*iel 5 access-token auth0 flutter appauth
我已经阅读了这篇关于如何开始在 Flutter 中使用 Auth0 的文章。
作者写道:“ ……完整的安全注销超出了本文的范围”。
文章中的注销方法是这样的:
void logoutAction() async {
await secureStorage.delete(key: 'refresh_token');
setState(() {
isLoggedIn = false;
isBusy = false;
});
Run Code Online (Sandbox Code Playgroud)
}
我从设备上的安全存储中删除了刷新令牌。现在,我希望能够进行更完整的注销,该用户必须使用用户名和密码再次进行完整登录。目前,用户无需输入用户名和密码即可登录,我认为这是由于访问令牌保存在某处。如果这是由于访问令牌造成的,我如何从浏览器 cookie 或存储它的任何位置删除此访问令牌?
避免存储访问令牌的一种方法是添加promptValues: ['login]
到登录方法中。这样做的问题是用户每次都必须登录,因此完全消除了存储的访问令牌的好处。再次强调,我希望用户能够“完全”注销,从 cookie 中清除访问令牌。
Future<void> loginAction() async {
setState(() {
isBusy = true;
errorMessage = '';
});
try {
final AuthorizationTokenResponse result =
await appAuth.authorizeAndExchangeCode(
AuthorizationTokenRequest(
AUTH0_CLIENT_ID,
AUTH0_REDIRECT_URI,
issuer: 'https://$AUTH0_DOMAIN',
scopes: ['openid', 'profile', 'offline_access'],
// promptValues: ['login']
),
);
final idToken = parseIdToken(result.idToken);
final profile = await getUserDetails(result.accessToken);
await secureStorage.write(
key: 'refresh_token', value: result.refreshToken);
setState(() {
isBusy = false;
isLoggedIn = true;
name = idToken['name'];
picture = profile['picture'];
});
} catch (e, s) {
print('login error: $e - stack: $s');
setState(() {
isBusy = false;
isLoggedIn = false;
errorMessage = e.toString();
});
}
Run Code Online (Sandbox Code Playgroud)
}
归档时间: |
|
查看次数: |
1141 次 |
最近记录: |