Я использую флаттер (но этот вопрос также очень актуален для android), поскольку это скорее вопрос на стороне сервера.
У меня есть приложение флаттера с виджетом входа (компонентом)
import 'dart:async';
import 'dart:io' as io;
import 'package:path/path.dart';
import 'package:login_app/models/user.dart';
import 'package:sqflite/sqflite.dart';
import 'package:path_provider/path_provider.dart';
class DatabaseHelper {
static final DatabaseHelper _instance = new DatabaseHelper.internal();
factory DatabaseHelper() => _instance;
static Database _db;
Future<Database> get db async {
if(_db != null)
return _db;
_db = await initDb();
return _db;
}
DatabaseHelper.internal();
initDb() async {
io.Directory documentsDirectory = await getApplicationDocumentsDirectory();
String path = join(documentsDirectory.path, "main.db");
var theDb = await openDatabase(path, version: 1, onCreate: _onCreate);
return theDb;
}
void _onCreate(Database db, int version) async {
// When creating the db, create the table
await db.execute(
"CREATE TABLE User(id INTEGER PRIMARY KEY, username TEXT, password TEXT)");
print("Created tables");
}
Future<int> saveUser(User user) async {
var dbClient = await db;
int res = await dbClient.insert("User", user.toMap());
return res;
}
Future<int> deleteUsers() async {
var dbClient = await db;
int res = await dbClient.delete("User");
return res;
}
Future<bool> isLoggedIn() async {
var dbClient = await db;
var res = await dbClient.query("User");
return res.length > 0? true: false;
}
}
в настоящее время он хранит пользователя и пароль в sqlite, пароль отправляется каждый раз, и я сравниваю его с паролем в бэкэнде - я хочу начать использовать сеансы (это случайный токен), также потому что я реализовал одиночную аутентификацию в facebook и google, но я хочу убедиться, что, как и в реальных приложениях, приложение по-прежнему подключается даже через неделю после первоначального входа в систему. моя БД (на стороне сервера) в результате первого входа в систему (через пароль, google или facebook) и возврата, у нее есть заголовок http, сохраните его на диске мобильного приложения с помощью sqlite (sqlflite для флаттера) и снова отправьте токен в каждом HTTP-запрос после этого.
Это звучит разумно? Или есть еще стандартные способы?
Спасибо