《jwt laravel》
一、解决方案简述
在Laravel项目中使用JWT(JSON Web Token)可以实现安全可靠的用户身份验证。通过JWT,客户端能够携带令牌与服务器进行交互,而无需依赖传统的基于会话的认证方式。它有助于构建无状态的API,方便前后端分离项目的开发,并且能有效保障数据的安全性。
二、基于Dingo JWT包实现JWT认证
1. 安装
在composer.json文件中添加对dingo/api和tymon/jwt - auth包的依赖:
json
"require": {
"php": "^7.3|^8.0",
// 其他依赖
"tymon/jwt-auth": "^1.0"
}
然后执行composer update
命令安装。
2. 配置
发布JWT - Auth配置文件:
bash
php artisan vendor:publish --provider="TymonJWTAuthProvidersLaravelServiceProvider"
修改.env
文件中的密钥:
properties
JWT_SECRET=your_jwt_secret_key
3. 用户登录示例代码
在app/Http/Controllers/AuthController.php
中编写登录逻辑:
```php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use TymonJWTAuthFacadesJWTAuth;
use AppModelsUser;
class AuthController extends Controller
{
public function login(Request $request)
{
$credentials = $request->only('email', 'password');
if (! $token = JWTAuth::attempt($credentials)) {
return response()->json(['error' => 'invalid_credentials'], 400);
}
return response()->json(compact('token'));
}
}
```
三、基于自定义中间件的方式
创建一个名为JwtMiddleware的中间件:
php
php artisan make:middleware JwtMiddleware
在app/Http/Middleware/JwtMiddleware.php
中编写代码:
```php
namespace AppHttpMiddleware;
use Closure;
use TymonJWTAuthFacadesJWTAuth;
use TymonJWTAuthExceptionsTokenInvalidException;
use TymonJWTAuthExceptionsTokenExpiredException;
class JwtMiddleware
{
public function handle($request, Closure $next)
{
try {
JWTAuth::parseToken()->authenticate();
} catch (TokenInvalidException $e) {
return response()->json(['status' => 'Token is Invalid'], 401);
} catch (TokenExpiredException $e) {
return response()->json(['status' => 'Token is Expired'], 401);
} catch (TymonJWTAuthExceptions.JWTException $e) {
return response()->json(['status' => 'Token error'], 500);
}
return $next($request);
}
}
```
再将这个中间件应用到需要保护的路由上。
以上两种思路都能在Laravel项目中很好地实现JWT功能,可根据项目需求选择合适的方式。