用户登录,token验证开发(含过期时间)
生活随笔
收集整理的這篇文章主要介紹了
用户登录,token验证开发(含过期时间)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
其實所謂的token,就是一串加密的字符串
需求:用戶登錄訪問頁面后,在未退出登錄賬號的情況下,再次訪問頁面無需再次登錄
首先我們拋開過期時間不管
設(shè)計思路:主要是前端有個緩存可以存取一些信息一段時間,所以
?
?
?
?
假如需求是注冊成功后自動登錄 ,則在注冊接口添加用戶信息成功后再根據(jù)用戶賬號查詢出用戶token返回給前端,和上圖圖2方法一樣
接下來是做token的有效期
首先得知道為什么要做token有效期。假如token生成后就一直不變,那么有一天被不速之客在前端頁面獲取到了用戶的token,那么他則可以為所欲為了。所以為了防止token泄漏,我們得為token做一個有效期,一般為三天,如果用戶三天都沒有登錄過,那么我們得讓用戶重新登錄一下
主要是想好在哪里插入和更新token的有效期:
注:更新token有效期不一定要更新token哦!!過期或登錄時才同時token,變一下token,你懂的
詳細(xì)代碼如下:
//手機(jī)綁定public function mobileBinding($mobile, $verify,$company_name,$company_car_num,$linkman,$password){$admin_mode = AdminModel::getInstance();$company_model = CompanyModel::getInstance();$admin = $admin_mode->where(['phone' => $mobile])->find();if ($admin) {$this->displayByError('用戶已存在');}//驗證碼有效期$valid_time = ValidateModel::getInstance()->where(['phone'=>$mobile])->value('valid_time');if(strtotime($valid_time) < time()){//驗證碼過期了$data = array('verify' => sprintf('%04d',rand(0,9999)),'valid_time' => date("Y-m-d H:i:s",time()+600)//有效期10分鐘);ValidateModel::getInstance()->where(['phone'=>$mobile])->save($data);}$is_right = ValidateModel::getInstance()->where(['phone' => $mobile, 'verify' => $verify])->find();if (!$is_right) {$this->displayByError('驗證碼有誤');}$company = $company_model->where(['name' => $company_name])->find();if ($company) {$this->displayByError('公司名已注冊');}BaseModel::getInstance()->startTrans();try{//用戶表$data = array('username' => $mobile,'phone' => $mobile,'linkman' => $linkman,'password' => $password,'token' => md5(time() . rand(0, time())),'valid_time' => date('Y-m-d H:i:s',time()+259200),//token三天有效期'role_id'=>2,//商家);$admin_mode->add($data);$admin_id = $admin_mode->getLastInsID();//公司表$data2 = array('name' => $company_name,'car_num' => $company_car_num,'admin_id' => $admin_id);$company_model->add($data2);$company_id = $admin_mode->getLastInsID();$admin_mode->where(['phone' => $mobile])->save(['company_id'=>$company_id]);BaseModel::getInstance()->commit();//重新查詢一下,返回用戶信息$user = $admin_mode->where(['phone' => $mobile])->find();$this->displayByData($user);}catch (\Exception $e){BaseModel::getInstance()->rollback();}$this->displayByError();} //用戶登錄public function login($mobile, $password){$res = AdminModel::getInstance()->where(['phone' => $mobile])->find();if (!$res) {$this->displayByError('用戶不存在,請注冊');}$res2 = AdminModel::getInstance()->where(['phone' => $mobile, 'password' => $password])->find();if (!$res2) {$this->displayByError('密碼錯誤');}if ($res['is_stop'] != 1) {$this->displayByError('請聯(lián)系客服激活賬號');}$data = array('token' => md5(time() . $password . $mobile),'valid_time' => date('Y-m-d H:i:s',time()+259200),//token三天有效期);AdminModel::getInstance()->where(['phone'=>$mobile])->save($data);$user_info = AdminModel::getInstance()->where(['phone' => $mobile])->find();//重新查詢用戶信息$this->displayByData($user_info);//返回用戶信息給前端} class AdminLogin extends BaseController {protected $admin;protected $company_id;protected $admin_power;public function __construct(){parent::__construct();if($_REQUEST['debug']){$this->admin = AdminModel::getInstance()->where(['id'=>$_REQUEST['debug']])->find();if(!$this->admin){$this->displayByError("用戶不存在,請注冊");}}else{$token = $_REQUEST['admin_token']?$_REQUEST['admin_token']:0;$this->admin = AdminModel::getInstance()->adminInfo($token);//查詢用戶是否存在if(!$this->admin){$this->displayByError("請重新登錄",501);//兩個同時登錄,被頂下去了}if($this->admin['is_stop'] != 1){$this->displayByError('請聯(lián)系客服繳費(fèi)激活賬號');}//token三天有效期if(strtotime($this->admin['valid_time'])<time()){//過期$data = array('token' => md5(time() . $this->admin['password'] . $this->admin['phone']),'valid_time' => date('Y-m-d H:i:s',time()+259200),//token三天有效期);AdminModel::getInstance()->where(['phone'=>$this->admin['phone']])->save($data);$this->displayByError("認(rèn)證過期,請重新登錄",502);}$data = array('valid_time' => date('Y-m-d H:i:s',time()+259200),//token三天有效期);AdminModel::getInstance()->where(['phone'=>$this->admin['phone']])->save($data);}$this->company_id = $this->admin['company_id'];$this->filterData();} }?good Luck!!
?
、
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的用户登录,token验证开发(含过期时间)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 南京有哪些必去的大排档?菜品推荐?
- 下一篇: TP5 事务