最近寫的ionic2項目,需要處理隔天請求某些數(shù)據(jù)時,會提示非法請求,然后根據(jù)后端返回的error,退出登錄,并返回到登錄頁.
然后,步驟就是 調(diào)用退出登錄的接口,在成功的狀態(tài)里,接著清除在啟動頁記錄存儲用戶的信息("userid",token,sid)等信息.? 然后設(shè)置Login為root跟目錄 : ? ? ? ?this.nav.setRoot(LoginPage);
然后,突然想起來了之前ios寫的 ?登錄,退出 功能. ? 無非不也是這種思路呢.. 然后搜了下,ios退出登錄的實現(xiàn). ?一大堆問題,說各種 的都有,. 1. 說什么再次登錄成功后 進入的是設(shè)置界面(退出按鈕所在的頁面),?
2. ?有的說再次進去app的時候,沒有顯示登錄頁面,而是進的首頁.
其他的還有一大堆............
1. 我們先來分析下第一種 的情況: 退出成功了, 的確也回到登錄頁了.. ?那么你是如何回到登錄頁的? modal? dismiss? ? 這新手也很少會犯這樣的錯誤吧? 請你先搜搜push 和 Modal 到底是怎么用的.
2.第二種情況. 明明退出了,為何再次進去app的時候,沒有顯示登錄頁面,而是進的首頁.
首先,退出跳轉(zhuǎn)的代碼是怎么寫的?是不是寫在退出請求返回成功的代碼里? 沒有有設(shè)置tab select(0)選中第一個角標(biāo)?, 只有當(dāng)成功的時候,你再去跳轉(zhuǎn)到登錄頁啊. ?其次是你在登錄的時候,是不是做了保存密碼,自動登錄處理? ? 如果是的話,那你在退出的時候,是否清除了存儲的某些信息或設(shè)置? 如果你能把這兩點搞清楚,也就能避免第二種情況了.
然后說下比較嚴(yán)謹(jǐn)?shù)耐顺龅卿?返回登錄頁的步驟.
? ? ?加入這是一個退出登錄請求返回的block ?: ? outLogin(data){
? ? ? ? ? ? ?if(data.success ==1){//即請求成功.
? ? ? ? ? ? ?//1.先做清楚數(shù)據(jù)操作. 清楚你可能存儲的 自動登錄做保存的信息 或者某些設(shè)置
//2.做跳轉(zhuǎn)
UIWindow * window = [[[UIApplication ?sharedApplication]delegate]window];// 獲得根窗口
LoginViewController*loginVC?= [[LoginViewController ?alloc]init];//將登錄控制器設(shè)置為window的根控制器
UINavigationController * nav?=?[[UINavigationController ?alloc]initWithRootViewController: loginVC];
window.rootViewController=?nav;
?? ? ? ? ? ? ?}
? ? ? ?}
3.如果想做的更好一點,避免退出APP后再登錄時,防止再次跳轉(zhuǎn)設(shè)置界面。應(yīng)當(dāng)將設(shè)置控制器推出到根控制器popToRootViewControllerAnimated
在頁面將要消失的代碼里面寫
- (void)viewWillDisappear:(BOOL)animated {
? ? [superviewWillDisappear:animated];
? ?[self.navigationControllerpopToRootViewControllerAnimated:YES];
? ?NSMutableArray*vcs?=?[self.navigationController.viewControllers ?mutableCopy];
? ?[vcs ?removeAllObjects]; ? ??
//還有 可以順便了解下 ViewController的生命周期? 看看push 和pop? 的時候 哪些Controller是銷毀的 哪些是存在的
}
4.順便再說下保存密碼,自動登錄時候 token過期的處理
如果設(shè)置可自動登錄項,那么當(dāng)你自動登錄如果遇到token過期的情況沒處理的話,那就是直接進到app (因為默認(rèn)會請求首頁的數(shù)據(jù),此時你傳遞過去的是錯誤的token), 并且顯示非法請求等等(反正就是拿到錯誤的token,請求數(shù)據(jù)時, 后臺會返給你error)
現(xiàn)在有兩種解決方案, 當(dāng)?shù)卿浀臅r候首先會做請求,如果拿到的error等于token錯誤的,
1. 自動退回到登錄頁, 讓用戶從新登錄.
2.直接在此處 觸發(fā)登錄請求, 拿到登錄成功后返回的最新token. ?這時候再進入首頁自動請求數(shù)據(jù)就避免了 非法請求的情況.