2021年4月6日星期二

Flutter Secure Storage for Firebase Authentication Persistence

I was previously using shared_preferences as my method of maintaining user login status. However, I've recently learned of flutter_secure_storage and the security benefits associated with it and would like to use this approach instead. I've attempted to implement this method myself, however, I doesn't seem to work. I keep getting redirected to the Welcome() screen.

flutter_secure_storage: ^4.1.0

secure_storage.dart

import 'package:flutter_secure_storage/flutter_secure_storage.dart';    class SecureStorage {    final _storage = FlutterSecureStorage();      Future writeSecureData(String key, String value) async {      var writeData = await _storage.write(key: key, value: value);      return writeData;    }      Future readSecureData(String key) async {      var readData = await _storage.read(key: key);      return readData;    }      Future deleteSecureData(String key) async{      var deleteData = await _storage.delete(key: key);      return deleteData;    }  }

login.dart

I've only included the relevant line of code here

final SecureStorage secureStorage = SecureStorage();  secureStorage.writeSecureData('email', email);

main.dart

import 'package:flutter/material.dart';    import 'package:firebase_core/firebase_core.dart';  import 'package:podapp/theme/routes.dart';  import 'package:podapp/utils/secure_storage.dart';  import 'package:podapp/views/home.dart';  import 'package:podapp/views/welcome.dart';    // Initialize email   String userEmail;    // Initalize secure storage for persistent login check  final SecureStorage secureStorage = SecureStorage();    Future<void> main() async {    WidgetsFlutterBinding.ensureInitialized();    await Firebase.initializeApp();      // Check if user email exists in storage    secureStorage.readSecureData('email').then((value) {      userEmail = value;    });      runApp(MyApp(userEmail));  }    class MyApp extends StatelessWidget {    // String passed from future main()    MyApp(this.userEmail);    final String userEmail;      @override    Widget build(BuildContext context) {      return MaterialApp(            [...]            // If the email in local storage matches keep user logged in          // This is based on SharedPreferences          home: userEmail == null ? Welcome() : Home());    }  }
https://stackoverflow.com/questions/66979025/flutter-secure-storage-for-firebase-authentication-persistence April 07, 2021 at 11:04AM

没有评论:

发表评论