国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

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

2019-12-12 03:58:44
字體:
供稿:網(wǎng)友

什么是token

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

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

token的作用

token可以顯著減少服務(wù)端對用戶表的查詢,同時(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é)束原來的主頁面     Toast.makeText(getApplicationContext(),"注冊成功",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(),"注冊失敗"+user.getmMessage(),Toast.LENGTH_SHORT).show();    }   }  });

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

進(jìn)行網(wǎng)絡(luò)請求前查詢本地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,但并不建議這么做,雖然這樣很簡單。因?yàn)閡serId顯然無法判別是否過期,如果我們需要實(shí)現(xiàn)token過期的判別,則可以采用將userId與日期拼接的方式。

此外,為了安全起見,不要在客戶端生成token。

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 和林格尔县| 南平市| 漳浦县| 晋州市| 三原县| 西乡县| 三明市| 道孚县| 格尔木市| 梅州市| 松江区| 衡山县| 连云港市| 玉龙| 凉山| 菏泽市| 突泉县| 闵行区| 曲周县| 治多县| 麻城市| 阿坝| 那坡县| 安义县| 呈贡县| 洮南市| 南丹县| 贵州省| 中西区| 盐亭县| 西林县| 梓潼县| 辽中县| 新营市| 呼伦贝尔市| 衡南县| 武功县| 民乐县| 克什克腾旗| 雷山县| 新晃|