2012-08-06 114 views
0

我已經開發了我的第一個iOS應用,它允許用戶登錄我們網站上的帳戶,並查看/添加/編輯/刪除數據庫中的記錄。iOS應用登錄流程

我寫了一個基本的應用程序來處理這樣的過程;

應用程序開始運行。

每個視圖控制器從viewWillAppear方法中調用checkAuth方法。此方法獲取應用程序中存儲的用戶名和密碼,將其作爲GET變量發送到服務器,請求dataWithContentsOfURL。然後檢查生成的JSON,如果響應失敗,則會顯示一個警告對話框,並將用戶帶到不同的選項卡(我使用的是選項卡欄控制器),並提示用戶輸入其登錄詳細信息。

使用此方法,每當不同的視圖控制器接管(故事板文件中的每個場景)時,都會調用auth方法。這似乎有點浪費。有沒有更好的方式確保用戶登錄憑據是正確的?

謝謝。

回答

3

在應用程序中存儲用戶名和密碼是不好的做法。如果修改後端在您的控制範圍內,則最好對後端進行身份驗證,並獲取僅適用於該設備的令牌。

從這裏,您將令牌與每個請求一起傳遞,並且如果後端確定您已註銷,則它應該返回錯誤消息。通過這種方式,身份驗證將在臨時基礎上進行檢查,並且僅在發送請求時進行檢查。

我認爲沒有理由每次加載視圖時都這樣做,除非對此有業務要求。

3

爲什麼你不使用「通信管理」單身人士呢?它將處理與服務器進行身份驗證和通信的所有任務,並且每個控制器都會與它進行對話,而無需直接與服務器交互。

+0

好主意,但仍然沒有克服「浪費」帶寬的問題。 – ader 2012-08-06 16:05:31

1

您可能有一個非活動會話超時:通過NSTimer。 成功登錄時設置會話超時標記(例如,登錄時間加10分鐘)。 由於用戶使用應用程序不斷更新存儲的會話超時時間到當前時間加10分鐘(使計時器無效並創建一個新時間)。 當應用程序退出或進入後臺會使計時器無效。 定時器在定時器超時時調用註銷方法。

哦,不要在應用程序中存儲用戶名/密碼。使用鑰匙串將它們加密存儲(如果需要將它們保持在本地)。我建議只有用戶名應該存儲在本地。