Работа с сеансами на стороне сервера для аутентификации с помощью android app / flutter - PullRequest
0 голосов
/ 30 мая 2020

Я использую флаттер (но этот вопрос также очень актуален для 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-запрос после этого.

Это звучит разумно? Или есть еще стандартные способы?

Спасибо

...