У меня проблема с реализацией аутентификации TouchID / FaceID таким образом, что она автоматически запрашивает пользователя при открытии приложения. Я использую зависимость local_auth для TouchID / FaceID.
В приведенном ниже коде биометрическая аутентификация появится, когда приложение возобновит работу, но ее также невозможно отменить. Если вы нажмете кнопку «Домой», она отклонит запрос TouchID, но сразу же начнет повторную попытку, и вызовет бесконечный цикл, если вы продолжите пробовать это. Он также дважды будет выдавать случайный запрос, поэтому даже если вы успешно войдете в систему с первым запросом TouchID, он сразу же появится снова. Кто-нибудь знает способ исправить это? У меня также есть кнопка TouchID на странице входа в систему, которую пользователи могут нажимать, чтобы вручную запросить TouchID, но я бы хотел воссоздать, как работают мои банковские приложения и другие, где TouchID запрашивает, когда вы автоматически открываете приложение.
void initState() {
super.initState();
SystemChannels.lifecycle.setMessageHandler((msg) async {
if (msg==AppLifecycleState.resumed.toString()) {
// If can pop, app is not at login screen
// so don't prompt for authentication
if (!Navigator.canPop(context)) {
if (_useFingerprint) {
SharedPreferences prefs = await SharedPreferences.getInstance();
String password = prefs.getString('password');
biometricAuthentication(_username, password);
}
}
}
});
void biometricAuthentication(String user, String pass) async {
print("Biometric Authentication Called");
bool didAuthenticate = false;
try {
didAuthenticate = await localAuth.authenticateWithBiometrics(localizedReason: 'Please authenticate');
} on PlatformException catch (e) {
print(e);
}
if (!mounted) {
return;
}
if (!didAuthenticate) {
return;
}
else {
normalLogin(user, pass);
}
}