2015-05-22 48 views
0

我的科爾多瓦應用程序有一個登錄名(用戶名/密碼),一旦通過身份驗證,應用程序文件系統的根目錄下就會創建一個名爲stk.db的文件。科爾多瓦應用程序本地存儲在應用程序重新安裝後仍然存在

當我卸載應用程序&重新安裝它時,我自動使用之前登錄的帳戶登錄(由於stk.db文件正在讀取&拉出與用戶帳戶相關的'標記' )。

很明顯,我想讓用戶被迫輸入新的用戶帳戶,如果他們重新安裝應用程序,基於下面的代碼的最佳方法是什麼?

define([ 
"jquery", 
"backbone", 
"config", 
"stk/controllers/errorController", 
"stk/controllers/accountController", 
"stk/controllers/onboardController", 
"stk/controllers/stkController" 
], 

function(
$, 
Backbone, 
Config, 
ErrorController, 
AccountController, 
OnboardController, 
stkController) 
{ 

"use strict"; 

// -------------------------------------------------------------------------------------------- 
// Controller 
// -------------------------------------------------------------------------------------------- 

var app = function(router) { 

    var self = this; 
    self.router = router; 
    self.views = {}; 
    self.ctors = {}; 

    self.stack = [ 
     { id: 0, name : "Account", selected: true, direction: null }, 
     { id: 1, name : "Achievements", selected: false, direction: null }, 
     { id: 2, name : "Prizes", selected: false, direction: null }, 
     { id: 3, name : "Shop", selected: false, direction: null }, 
     { id: 4, name : "Leaderboard", selected: false, direction: null }, 
     { id: 5, name : "Stats", selected: false, direction: null }, 
     { id: 6, name : "Contactus", selected: false, direction: null } 
    ]; 

    // -------------------------------------------------------------------------------------------- 
    // register events 
    // -------------------------------------------------------------------------------------------- 

    _.extend(this, Backbone.Events); 

    this.on("error", function (args) { this.error(args); }, this); 
    this.on("start", function (args) { this.db(args); }, this); 
    this.on("login:complete", function (args) { this.loginComplete(args); }, this); 
    this.on("onboard:complete", function (args) { this.onboardComplete(args); }, this); 

    // -------------------------------------------------------------------------------------------- 
    // event handlers 
    // --------------------------------------------------------------------------------------------   

    this.db = function() { 

     var self = this; 

     var loadDB = function(callback) { 
      self.storage(callback); 
     }   

     loadDB(function(db) { 

      var check = {}; 

      $.each(db.split("|"), function() { 
       var entry = this.split(":"); 
       check[entry[0]] = entry[1]; 
      }) 

      self.start(check); 

     }) 

    }; 


    this.start = function(db) { 

     if (db.loggedin != "true") { 
      this.login(); 
     } else { 
      this.token = db.token; 
      if (db.boarded === "true") { 
       this.launch(); 
      } else { 
       this.onboard(); 
      } 
     } 

    }; 

    this.isCarUser = function (usercb) { 


     var self = this; 
     var check = {}; 

     self.storage(function (db) { 

      $.each(db.split("|"), function() { 
       var entry = this.split(":"); 
       check[entry[0]] = entry[1]; 
      }) 

      usercb(check.Car_user); 
     }); 
    }; 



    this.error = function(message) { 
     var handle = "errorCtor"; 
     (this.ctors[handle] === undefined) 
       ? new ErrorController().setup(handle).events().init(message) 
       : this.ctors[handle].init(message); 
    }; 

    this.login = function(args) { 
     var handle = "accountCtor"; 
     (this.ctors[handle] === undefined) 
       ? new AccountController().setup(handle).events().init(args) 
       : this.ctors[handle].init(args); 
    }; 

    this.loginComplete = function(args) { 

     var self = this; 
     self.token = args; 

     var store = function(callback) { 
      self.setLoggedIn(callback, self.token); 
     }   

     store(function(db) { 
      self.onboard(); 
     }); 

    }; 

    this.onboard = function(args) { 
     var handle = "onboardCtor"; 
     (this.ctors[handle] === undefined) 
       ? new OnboardController().setup(handle).events().init(args) 
       : this.ctors[handle].init(args); 
    }; 

    this.onboardComplete = function(args) { 

     var self = this; 

     var store = function(callback) { 
      self.setBoarded(callback, self.token); 
     }   

     store(function() { 
      self.launch(); 
     }); 

    }; 

    this.launch = function(args) { 
     var handle = "stkCtor"; 
     (this.ctors[handle] === undefined) 
       ? new stkController().setup(handle).events().init(args) 
       : this.ctors[handle].init(args); 
    }; 

    // -------------------------------------------------------------------------------------------- 
    // FS 
    // -------------------------------------------------------------------------------------------- 

    this.setBoarded = function(callback, token) { 

     var self = this; 

     var fc = 'opened:true|loggedin:true|boarded:true||Car_user:false|token:' + token; 

     var errorHandler = function(e) { 
      self.error(e); 
     }; 

     var onInitFs = function(fs) { 

      fs.root.getFile('stk.db', {}, function(fileEntry) { 

       fileEntry.createWriter(function(fileWriter) { 

        fileWriter.onwriteend = function(e) {         
         callback(fc); 
        }; 

        fileWriter.onerror = function(e) { 
         self.error(e.toString()); 
        }; 

        var boarded = new Blob([fc], {type: 'text/plain'}); 

        fileWriter.write(boarded); 

       }, errorHandler); 

      }); 

     }; 

     if (window.isDevice) { 
      window.requestFileSystem(window.PERSISTENT, 512, onInitFs, errorHandler); 
     } else { 
      callback(fc); 
     } 

    }; 

    this.setLoggedIn = function(callback, token) { 

     var self = this; 

     var fc = 'opened:true|loggedin:true|boarded:false|Car_user:false|token:' + token; 

     var errorHandler = function(e) { 
      self.error(e); 
     }; 

     var onInitFs = function(fs) { 

      fs.root.getFile('stk.db', {}, function(fileEntry) { 

       fileEntry.createWriter(function(fileWriter) { 

        fileWriter.onwriteend = function(e) {                
         callback(fc); 
        }; 

        fileWriter.onerror = function(e) { 
         self.error(e.toString()); 
        }; 

        var loggedIn = new Blob([fc], {type: 'text/plain'}); 

        fileWriter.write(loggedIn); 

       }, errorHandler); 

      }); 

     }; 

     if (window.isDevice) { 
      window.requestFileSystem(window.PERSISTENT, 512, onInitFs, errorHandler); 
     } else { 
      callback(fc); 
     } 

    }; 


    this.setCarUser = function(callback, CarUser){ 

     var self = this; 

     var fc = 'opened:true|loggedin:true|boarded:true|token:' + this.token + "|Car_user:"+ CarUser; 

     var errorHandler = function(e) { 
      self.error(e); 
     }; 

     var onInitFs = function(fs) { 

      fs.root.getFile('stk.db', {}, function(fileEntry) { 

       fileEntry.createWriter(function(fileWriter) { 

        fileWriter.onwriteend = function(e) { 
         callback(fc); 
        }; 

        fileWriter.onerror = function(e) { 
         self.error(e.toString()); 
        }; 

        var loggedIn = new Blob([fc], {type: 'text/plain'}); 

        fileWriter.write(loggedIn); 

       }, errorHandler); 

      }); 

     }; 

     if (window.isDevice) { 
      window.requestFileSystem(window.PERSISTENT, 512, onInitFs, errorHandler); 
     } else { 
      callback(fc); 
     } 
    } 

    this.storage = function(callback) { 

     var self = this; 

     var fc = 'opened:true|loggedin:false|boarded:false|token:null|Car_user:false'; 

     var errorHandler = function(e) { 
      console.log(e); 
     }; 

     var onInitFs = function(fs) { 

      fs.root.getFile('stk.db', {}, function(fileEntry) { 

       fileEntry.file(function(file) { 

        var reader = new FileReader(); 

        reader.onloadend = function(e) { 
         callback(this.result); 
        }; 

        reader.readAsText(file); 

       }, errorHandler); 

      }, function() { 

       fs.root.getFile('stk.db', {create: true, exclusive: true}, function(fileEntry) { 

        fileEntry.createWriter(function(fileWriter) { 

         fileWriter.onwriteend = function(e) {         
          callback(fc); 
         }; 

         fileWriter.onerror = function(e) { 
          self.error(e.toString()); 
         }; 

         var opened = new Blob([fc], {type: 'text/plain'}); 

         fileWriter.write(opened); 

        }, errorHandler); 

       }, errorHandler); 

      }); 

     }; 

     if (window.isDevice) { 
      window.requestFileSystem(window.PERSISTENT, 512, onInitFs, errorHandler); 
     } else { 
      callback(fc); 
     } 

    }; 

}; 

return app; 

} 

); 
+0

我認爲如果您使用「localStorage」來保存登錄信息而不是使用本地文件localStorage.getItem(「loginInfo」);會更好。它將被自動刪除,如果應用程序被卸載 –

+0

我不得不同意 - 該應用程序是由一個外部開發公司開發,有點衝到它imho – Zabs

回答

2

如果你真的需要使用本地文件由於某些原因,你可以存儲在本地文件版本號,並將其與存儲在裏面的index.html版本號進行比較,如果這兩個版本號不同的,刪除登錄信息。在本地文件中更新版本號。在本地文件中。

順便說一句,想告訴你,本地文件Api不能按預期在所有手機中工作。例如有時它掛在三星Note 2上,即沒有成功或失敗,但相同的代碼在其他手機中運行良好。

相關問題