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>

在框架index/server/创建JwtServer.php这个类

<?php


namespace app\index\server;
use Firebase\JWT\JWT;
use Firebase\JWT\Key;
use phpDocumentor\Reflection\Types\False_;

class JwtServer
{
public static function createToken($userId)
{
$key = "example_key";
$payload = array(
"iss" => "http://example.org",
"aud" => "http://example.com",
"iat" => 1356999524,
"nbf" => 1357000000,
'user_id'=>$userId
);
$jwt = JWT::encode($payload, $key, 'HS256');
return $jwt;
}
public static function decodeToken($jwt){
$key = "example_key";
$decoded = JWT::decode($jwt, new Key($key, 'HS256'));
if ($decoded){
return $decoded->user_id;
}else{
return false;
}

}
}

控制器代码参考:

<?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

 

 

 

 



 

posted @ 2021-08-25 16:42  鱼祖  阅读(999)  评论(0)    收藏  举报