Je pensais à cela récemment et je pense que j'ai une solution efficace. Je ne sais rien à propos de Rails mais l'idée devrait être transférée. Je n'ai que de l'expérience en Mongo pour une base de données alors supportez-moi.
Chaque périphérique a un identifiant unique qui peut être récupéré dans Cordova avec device.uuid (from the Cordova plugin) ou getUUID() (if you're using ngCordova). Cet identifiant n'est garanti que pour chaque plate-forme, bien qu'il soit susceptible d'être unique dans tous, vous devez donc ajouter la plate-forme et le modèle à votre identifiant unique pour faire bonne mesure.
var deviceId = device.platform + device.model + device.uuid;
Maintenant, nous avons créé un identifiant unique qui ne changera jamais et vous ne devez pas traiter avec le stockage local.
Maintenant, imaginez que vous ayez une collection ou un tableau de périphériques dans votre base de données qui ressemblent à ceci avec les paires valeur/clé suivantes. Maintenant, lorsque l'application démarre, récupérez le deviceId de l'appareil et envoyez-le à votre serveur pour le rechercher. Ce sera probablement différent pour vous, juste une simple recherche de valeur-clé.
var result = Devices.find({device: deviceId}).fetch();
En Mongo cela retournera un tableau des résultats, il ne devrait y avoir qu'un seul résultat. Maintenant, nous vérifions pour voir s'ils étaient précédemment connectés et récupérons l'userId.
var loggedIn = result[0].loggedIn;
var user = result[0].userId;
S'ils étaient déconnectés avant ou s'il n'y avait aucun résultat, apportez-les à la page de connexion. S'ils étaient connectés, exécutez les procédures de connexion normales automatiquement. L'ID utilisateur peut être une sorte de pointeur vers un objet d'une autre collection.
Voici comment je pense que je le ferais, sinon vous pouvez avoir l'objet utilisateur avoir l'ID de l'appareil comme une clé, mais un utilisateur peut avoir plusieurs périphériques, donc il devrait être un tableau de clés, et je Je ne suis pas sûr de savoir comment le rechercher maintenant. Ajouter de nouveaux périphériques serait aussi simple que d'ajouter l'identifiant unique à la collection et de le pointer vers l'utilisateur.
Chaque fois que l'application s'ouvre, elle vérifie l'identifiant de l'appareil et voit si l'utilisateur est connecté sur l'appareil. Vous pouvez afficher un écran d'accueil pendant que cela se produit. Maintenant, si l'utilisateur sélectionne la déconnexion des paramètres, vous pouvez mettre à jour la base de données pour refléter cela et la prochaine fois qu'ils iront à l'application, ils seront déconnectés.
J'espère que mes pensées pourraient être utiles.Je pensais qu'il serait peut-être préférable de supprimer l'objet périphérique de la collection chaque fois qu'ils se déconnectent au lieu de simplement définir le logIn, de cette façon, s'ils se débarrassent de l'appareil, il ne restera pas dans votre collection. Je ne suis pas sûr de la façon dont la suppression des objets aura souvent un impact sur les performances de la base de données, mais les utilisateurs ne se déconnectent pas trop souvent des périphériques pour autant que je sache, cela ne devrait pas poser de problème.
Cela soulève cependant un autre point, les périphériques utilisés. Il s'agit toutefois d'une solution facile, chaque fois qu'un utilisateur se connecte sur un périphérique déjà existant, mettez à jour la clé userId pour le nouvel utilisateur s'il a été modifié.
AUTRE EDIT (parce que je ne peux pas commenter): Sur le stockage local/mise en cache et pourquoi c'est dangereux. La seule chose que vous pourriez consigner automatiquement dans un stockage local serait leurs identifiants de compte, qui sont des informations très sensibles et ne devraient jamais être stockées localement (les mots de passe ne devraient pas être stockés à distance, mais le hachage est un sujet séparé). Vous ne stockez jamais leur mot de passe dans le cache, vous pouvez créer une clé secrète et la stocker, mais tout ce qui est accessible localement peut être lu par quelqu'un et potentiellement répliqué sur un autre périphérique. Les informations d'identification de l'appareil seraient beaucoup plus difficiles à truquer.
utilisation nom d'utilisateur et mot de passe ParamLogin localStorage.After dans localStorage et clair quand déconnecté. Si vous ne vous déconnectez pas et ne tuez pas l'application à chaque connexion, vérifiez que la valeur de votre clé localStorage est vide ou non, puis accédez à votre page. – Banik
Vous ne devriez pas utiliser localStorage ... il serait beaucoup plus facile d'utiliser une base de données WebSQL en raison de la connexion à votre base de données Web. – Sithys
@Sithys Bonne idée, mais malheureusement, WebSQL a été déprécié: http://programmers.stackexchange.com/questions/220254/why-is-web-sql-database-deprecated –