login: Restore saved url and email if available
This commit is contained in:
@@ -30,7 +30,7 @@ class _MyHomePageState extends State<MyHomePage> {
|
||||
Future<List<Sheet>> acquireSheets() async {
|
||||
final url = await _storageHelper.readSecure(SecureStorageKey.url);
|
||||
final jwt = await _storageHelper.readSecure(SecureStorageKey.jwt);
|
||||
apiClient = ApiClient(baseUrl: url!, token: jwt);
|
||||
apiClient = ApiClient(baseUrl: "${url!}/api", token: jwt);
|
||||
// TODO: check if really logged in
|
||||
final sheets = await apiClient!.fetchSheets();
|
||||
log.info("${sheets.length} sheets fetched");
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:jwt_decoder/jwt_decoder.dart';
|
||||
import 'package:logging/logging.dart';
|
||||
import 'package:sheetless/api.dart';
|
||||
import 'package:sheetless/home_page.dart';
|
||||
import 'package:sheetless/storage_helper.dart';
|
||||
@@ -12,6 +13,8 @@ class LoginPage extends StatefulWidget {
|
||||
}
|
||||
|
||||
class _LoginPageState extends State<LoginPage> {
|
||||
final log = Logger("_LoginPageState");
|
||||
|
||||
final TextEditingController _urlController = TextEditingController(
|
||||
text: "https://sheetable.julian-mutter.de",
|
||||
);
|
||||
@@ -27,30 +30,26 @@ class _LoginPageState extends State<LoginPage> {
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_checkJwtValidity();
|
||||
_restoreStoredValues();
|
||||
}
|
||||
|
||||
Future<void> _checkJwtValidity() async {
|
||||
Future<void> _restoreStoredValues() async {
|
||||
final jwt = await _storageHelper.readSecure(SecureStorageKey.jwt);
|
||||
if (jwt != null) {
|
||||
final isValid = await _validateJwt(jwt);
|
||||
if (isValid) {
|
||||
_navigateToMainPage();
|
||||
if (jwt != null && await _isJwtValid(jwt)) {
|
||||
await _navigateToMainPage();
|
||||
return;
|
||||
} else {
|
||||
}
|
||||
final url = await _storageHelper.readSecure(SecureStorageKey.url);
|
||||
final email = await _storageHelper.readSecure(SecureStorageKey.email);
|
||||
final password = await _storageHelper.readSecure(
|
||||
SecureStorageKey.password,
|
||||
);
|
||||
if (url != null && email != null && password != null) {
|
||||
_login(url, email, password);
|
||||
}
|
||||
if (url != null) {
|
||||
_urlController.text = url;
|
||||
}
|
||||
if (email != null) {
|
||||
_emailController.text = email;
|
||||
}
|
||||
}
|
||||
|
||||
Future<bool> _validateJwt(String jwt) async {
|
||||
Future<bool> _isJwtValid(String jwt) async {
|
||||
try {
|
||||
bool expired = JwtDecoder.isExpired(jwt);
|
||||
return !expired;
|
||||
@@ -63,15 +62,13 @@ class _LoginPageState extends State<LoginPage> {
|
||||
setState(() {
|
||||
_error = null;
|
||||
});
|
||||
serverUrl = "$serverUrl/api";
|
||||
final apiClient = ApiClient(baseUrl: serverUrl);
|
||||
final apiClient = ApiClient(baseUrl: "$serverUrl/api");
|
||||
final loginResult = await apiClient.login(email, password);
|
||||
if (loginResult.isOk()) {
|
||||
await _storageHelper.writeSecure(SecureStorageKey.url, serverUrl);
|
||||
await _storageHelper.writeSecure(SecureStorageKey.jwt, apiClient.token!);
|
||||
await _storageHelper.writeSecure(SecureStorageKey.email, email);
|
||||
await _storageHelper.writeSecure(SecureStorageKey.password, password);
|
||||
_navigateToMainPage();
|
||||
await _navigateToMainPage();
|
||||
} else {
|
||||
setState(() {
|
||||
_error = "Login failed.\n${loginResult.error()}";
|
||||
@@ -127,7 +124,6 @@ class _LoginPageState extends State<LoginPage> {
|
||||
TextFormField(
|
||||
controller: _emailController,
|
||||
validator: validateNotEmpty,
|
||||
autofocus: true,
|
||||
decoration: InputDecoration(labelText: 'Email'),
|
||||
textInputAction: TextInputAction.next,
|
||||
),
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
|
||||
import 'package:hive/hive.dart';
|
||||
|
||||
enum SecureStorageKey { url, jwt, email, password }
|
||||
enum SecureStorageKey { url, jwt, email }
|
||||
|
||||
enum ConfigKey { twoPageMode }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user