2024年Go最全TP6+JWT开发APP接口_tp6 session和jwt 交互,2024年最新从理论到实践
warning:
这篇文章距离上次修改已过191天,其中的内容可能已经有所变动。
在这个教程中,我们将会创建一个API接口来处理用户登出操作,并在客户端使用JWT进行验证。
首先,我们需要在User控制器中添加登出方法:
// app/controller/User.php
namespace app\controller;
use think\Controller;
use think\facade\Session;
class User extends Controller
{
// ...
// 登出接口
public function logout()
{
// 清除session
Session::clear();
// 返回登出成功信息
return json(['code' => 200, 'msg' => '登出成功', 'data' => []]);
}
}
然后,我们需要在Auth中间件中添加对JWT的支持,以便在登出时验证JWT:
// app/middleware/Auth.php
namespace app\middleware;
use think\facade\Request;
use Firebase\JWT\JWT;
class Auth
{
public function handle($request, \Closure $next)
{
// 获取header中的authorization参数
$authorization = $request->header('authorization');
if (!$authorization) {
return json(['code' => 401, 'msg' => '未提供Token', 'data' => []]);
}
// 解析JWT
try {
$decoded = JWT::decode($authorization, config('jwt.secret'), [config('jwt.alg')]);
$request->userId = $decoded->userId;
} catch (\Exception $e) {
return json(['code' => 401, 'msg' => 'Token无效', 'data' => []]);
}
// 继续执行下一个中间件
return $next($request);
}
}
最后,我们需要在全局中间件配置中注册Auth中间件,使其在每次请求时都会验证JWT:
// app/middleware.php
return [
// ...
'auth' => \app\middleware\Auth::class,
];
这样,我们就完成了登出接口的创建和JWT验证的集成。当用户请求登出接口时,我们会清除session,并返回登出成功的信息。在实际的APP请求中,我们会在客户端保存JWT,并在每次请求时携带这个Token,服务端会对Token进行验证。如果Token无效或未提供,会返回错误信息。
评论已关闭