最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android使用token維持登陸狀態(tài)的方法

 更新時(shí)間:2017年01月19日 16:50:34   作者:kevinjqy  
這篇文章主要介紹了Android使用token維持登陸狀態(tài)的方法,包括token的概念及作用介紹,本文給大家介紹的非常詳細(xì),需要的朋友參考下吧

什么是token

token(令牌)是一串唯一的字符串,通常由服務(wù)端生成,在注冊(cè)完成時(shí)返回給客戶端,用來(lái)標(biāo)識(shí)此用戶,客戶端將此字符串存儲(chǔ)在本地。在以后的網(wǎng)絡(luò)請(qǐng)求時(shí),客戶端先查詢本地的token,如果有則直接使用此令牌進(jìn)行網(wǎng)絡(luò)請(qǐng)求,沒(méi)有則提示未登錄,轉(zhuǎn)到登陸注冊(cè)界面。

此外,還可以在服務(wù)端或者客戶端添加過(guò)期判別機(jī)制。

token的作用

token可以顯著減少服務(wù)端對(duì)用戶表的查詢,同時(shí)使用戶不必每次都登陸,提高了系統(tǒng)的可用性與健壯性。

使用SharedPreferences保存token

獲取token并保存

NetWorks.regPost(user, password, email, tel, new Observer<User>() {
   @Override
   public void onCompleted() {
   }
   @Override
   public void onError(Throwable e) {    
    Log.e("LoginActivity",e.getLocalizedMessage()+"--"+e.getMessage());
   }
   @Override
   public void onNext(User user) {
    if(user.getmMessage().equals("success")){
     MainActivity.instance.finish();//結(jié)束原來(lái)的主頁(yè)面
     Toast.makeText(getApplicationContext(),"注冊(cè)成功",Toast.LENGTH_SHORT).show();
     //token保存到本地
     SharedPreferences sp = getSharedPreferences("loginToken", 0);
     SharedPreferences.Editor editor = sp.edit();
     editor.putString("userId",user.getmUserId());
     editor.putString("userName",user.getmUserName());
     editor.putString("phone",user.getmPhone());
     editor.putString("email",user.getmEmail());
     editor.putString("headImageUrl",user.getmHeadImageUrl());
     editor.commit();
     Intent i = new Intent(RegActivity.this,MainActivity.class);
     startActivity(i);
     finish();
    }else{
     Toast.makeText(getApplicationContext(),"注冊(cè)失敗"+user.getmMessage(),Toast.LENGTH_SHORT).show();
    }
   }
  });

我使用的是retrofit框架進(jìn)行網(wǎng)絡(luò)請(qǐng)求,上文是實(shí)現(xiàn)注冊(cè)功能的函數(shù),在onNext()函數(shù)中獲取服務(wù)端返回的結(jié)果,這個(gè)框架自動(dòng)把返回的json數(shù)據(jù)解析為對(duì)應(yīng)的類對(duì)象(即上文中的user對(duì)象)。因?yàn)閠oken的本質(zhì)是唯一的字符串,userId滿足這個(gè)要求,因?yàn)閡serId是由服務(wù)端生成且唯一,故我將userId作為token使用。

進(jìn)行網(wǎng)絡(luò)請(qǐng)求前查詢本地token

比如點(diǎn)擊側(cè)邊欄的頭像,如果未登錄則需要跳轉(zhuǎn)到登陸界面,已經(jīng)登陸則進(jìn)入個(gè)人信息界面。這時(shí)候,就需要查詢本地token進(jìn)行判別。

private void initData() {
  sp = getSharedPreferences("loginToken", 0);
  name = sp.getString("userId", null);
  userName = sp.getString("userName", null);
  email = sp.getString("email", null);  
 }
@Override
 public void onClick(View view) {
  switch (view.getId()) {   
   case R.id.imageView:
    if (name == null) {
     Intent i = new Intent(MainActivity.this, LoginActivity.class);
     startActivity(i);
    } else {
     Log.d("用戶ID", name);
     Intent i = new Intent(MainActivity.this, PersonInfoActivity.class);
     startActivity(i);
    }
    break;
  }
 }

備注

在此例中,我使用userId作為token,但并不建議這么做,雖然這樣很簡(jiǎn)單。因?yàn)閡serId顯然無(wú)法判別是否過(guò)期,如果我們需要實(shí)現(xiàn)token過(guò)期的判別,則可以采用將userId與日期拼接的方式。

此外,為了安全起見(jiàn),不要在客戶端生成token。

以上所述是小編給大家介紹的Android使用token維持登陸狀態(tài)的方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

最新評(píng)論

新竹市| 秦皇岛市| 牙克石市| 佳木斯市| 乐陵市| 时尚| 台东县| 兴海县| 隆林| 定边县| 九龙县| 黄陵县| 白山市| 山阳县| 金寨县| 双流县| 通化县| 多伦县| 新泰市| 壶关县| 建宁县| 七台河市| 建湖县| 元谋县| 毕节市| 治多县| 长治县| 曲周县| 宜川县| 惠来县| 于都县| 呼和浩特市| 勐海县| 分宜县| 精河县| 洪江市| 上林县| 木里| 蒙自县| 福州市| 盐边县|