tp5框架使用Token實現登錄功能


composer 安裝JWT

composer require lcobucci/jwt 3.3

前端代碼參考:

<body>
<p style="color: #5a6268;font-size: 30px;font-weight: bold;text-align: center;">登錄頁面</p>
<form style="width: 30%;margin: 0 auto">
<label>用戶名</label>
<input type="text" id="name" class="form-control" >
<label >密碼</label>
<input type="password" id="pwd" class="form-control">
<button type="button" class="btn btn-primary">確認登錄</button>
</form>
</body>
</html>
<script>
$('.btn').click(function () {
var name=$(this).siblings('#name').val();
var pwd=$(this).siblings('#pwd').val();
$.ajax({
"url":'/admin/login/login',
"type":"POST",
"data":{
'name':name,
'pwd':pwd,
'__token__':"{$Request.token}",
},
"dataType":"json",
"success":function (res) {
console.log(res);
if(res.code==200){
alert('登錄成功');
localStorage.setItem('token',res.data);//將token上傳到游覽器本地化
window.location.href="{:url('home/login/login')}";
}
},
"error":function (error) {
console.log(error);
}
})
})
</script>

在框架extend/tools/jwt創建Token.php這個類

namespace tools\jwt;

use Lcobucci\JWT\Builder;
use Lcobucci\JWT\Parser;
use Lcobucci\JWT\Signer\Hmac\Sha256;
use Lcobucci\JWT\ValidationData;
class Token
{
public static function createToken($uid = null)
{
$signer = new Sha256();//加密規則
$time = time();//當前時間

$token = (new Builder())
->issuedBy('teacher')//簽發人
->canOnlyBeUsedBy('student')//接收人
->identifiedBy('MarsLei', true) //標題id
->issuedAt($time)//發出令牌的時間
->canOnlyBeUsedAfter($time) //生效時間(即時生效)
->expiresAt($time + 3600) //過期時間
->with('uid', $uid) //用戶id
->sign($signer, 'my') //簽名
->getToken(); //得到token
return (string)$token;
}

public static function verifyToken($token=null){
//檢測是否接收到了token
if(empty($token)){
return 0;
}
//轉化為可以驗證的token
$token = (new Parser())->parse((string) $token);
//驗證基本設置
$data = new ValidationData();
$data->setIssuer('teacher');
$data->setAudience('student');
$data->setId('MarsLei');

if(!$token->validate($data)){
return 0;
}
//驗證簽名
$signer = new Sha256();
if(!$token->verify($signer, 'my')){
return 0;
}
//驗證通過,返回用戶id
return $token->getClaim('uid');
}

}

控制器代碼參考:

<?php

namespace app\admin\controller;
use think\Controller;
use tools\jwt\Token;

class Login extends Controller
{
public function login(){
$param=request()->post();

$data = [
'name' =>$param['name'],
'pwd' =>$param['pwd'],
];

$res=\app\admin\model\logins::loginDo($data);
if(!$res){
return json(['code'=>0,'data'=>'','msg'=>'登錄失敗']);
}else{
$token = Token::createToken($res['id']);
        
      session('token',$token);
        return json(['code'=>200,'data'=>$token,'msg'=>'登錄成功']);
}
}
}

攜帶token

 

寫一個基類方法判斷token是否有值

 

 

 登錄成功攜帶token

 

 

 

 



 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM