ThinkPHP6项目基操(16.实战部分 redis+token登录)
redis+token登錄
- 前言
- 一、生成唯一token
- 二、設置token并返回token到前端
- 三、登錄攔截器(需要登錄/不需登錄)
前言
登錄一般可以使用session處理,它使用比較簡單,但是一般用在web端比較多。如果需要考慮在多端運行,使用redis+token方式更加方便,為啥使用redis而不是使用數據庫存儲token呢?當然數據庫是可以存儲的,后臺可以請求數據庫查詢token字段,但是如果考慮高并發的情況,redis更加適合,一般查詢用戶信息的地方不會很多,判斷用戶是否登錄的情況會比較多。
一、生成唯一token
可以新建一個common類,專門放與字符串相關的方法:
<?phpnamespace app\common\lib;class Str {public static function getLoginToken($string){// 生成 token$str = md5(uniqid(md5(microtime(true)), true));return sha1($str . $string);} }二、設置token并返回token到前端
在登錄接口中,先判斷參數,如果參數通過,在生成token,將token存于radis中并設置失效時間,然后返回token到前端:
// business層的登錄方法 public function login($data){// 省略登錄參數驗證與數據庫更新操作$token = Str::getLoginToken($data["phone_number"]);$redisData = ["id" => $userId,"username" => $username];// 保存token到redis, 有效期7天$res = cache(config("radis.token_pre").$token, $redisData, 7 * 24 * 3600);return $res ? ["token" => $token, "username" => $username] : false; }這里直接使用cache保存,是因為在cache.php配置文件里設置了方式為redis,詳情可以看這篇文章的3.4配置緩存redis:阿里云短信結合redis實現登錄
// controller控制器層的登錄方法 調用business層的方法 $result = (new User())->login($data); if($result){return show(config('status.success'), "登錄成功", $result); }else{return show(config('status.error'), "登錄失敗"); }前端請求成功后獲取到token,然后保存下來,下次發請求的時候帶上,后臺去redis里查詢,如果token不存在或過期就會被后臺攔截。
Tips: 這里的token也不是百分百安全,因為如過有用戶獲取到了token,那么在有效期內這個token可以一直訪問到后臺數據,這個也是無法解決的事。
三、登錄攔截器(需要登錄/不需登錄)
待寫。。。
??重磅推薦:免費商用電商系統
😏想白嫖整個電商系統用來商用?
🤑想有自己的商城實現財富自由?
🤓想學習最佳實踐提升自己技術?
快來進入🚀 傳送門 🚀,開源免費、完整示例帶你快速入門,輕松二開,走上人生巔峰!👨?🎓
總結
以上是生活随笔為你收集整理的ThinkPHP6项目基操(16.实战部分 redis+token登录)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【五】Java数组
- 下一篇: ThinkPHP6项目基操(12.实战部