在ThinkPHP中实现Token鉴权,可以通过以下步骤进行:
1.生成Token:使用JWT(JSON Web Token)生成Token,其中包括用户ID、过期时间等信息。
use \Firebase\JWT\JWT;
$key = "example_key";
$payload = array(
"user_id" => 12345,
"exp" => time() + 3600
);
$token = JWT::encode($payload, $key);
2.验证Token:将Token存储在客户端,每次请求时将Token作为请求头信息发送至后端,后端通过JWT解码并验证Token是否过期和是否正确。
use \Firebase\JWT\JWT;
$key = "example_key";
$jwt = $_SERVER['HTTP_AUTHORIZATION'];
try {
$decoded = JWT::decode($jwt, $key, array('HS256'));
// 验证Token是否过期和是否正确
} catch (Exception $e) {
// Token验证失败
}
需要注意的是,在ThinkPHP中,可以使用中间件对Token进行验证,避免在每个控制器中都进行验证。
namespace app\http\middleware;
use \Firebase\JWT\JWT;
class TokenAuth
{
public function handle($request, \Closure $next)
{
$key = "example_key";
$jwt = $request->header('Authorization', '');
try {
$decoded = JWT::decode($jwt, $key, array('HS256'));
// 验证Token是否过期和是否正确
return $next($request);
} catch (Exception $e) {
// Token验证失败
return json([
'code' => 401,
'msg' => 'Unauthorized',
'data' => []
])->header('Content-Type', 'application/json');
}
}
}
在路由中使用中间件,例如:
Route::get('user/profile', 'User/profile')
->middleware('TokenAuth');