Laravel JWT:基于JWT的Laravel身份验证和授权

Laravel JWT是一个基于JWT(JSON Web Token)的Laravel身份验证和授权包。JWT作为一种轻量级的身份验证和授权解决方案,在Web应用程序中越来越受欢迎。本文将从多个方面对Laravel JWT进行详细阐述。

一、安装和配置

1、安装和配置Laravel JWT非常简单,首先您需要使用composer安装Laravel JWT:


composer require tymon/jwt-auth

2、安装成功后,您需要发布配置文件以及一些必要的文件:


php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"

3、在.env文件中添加一个密钥以用于JWT加密和解密:


JWT_SECRET=your-secret-key

4、接下来您需要对config/auth.php进行修改,将默认的guard和provider设置为JWT:


'guards' => [
    'api' => [
        'driver' => 'jwt',
        'provider' => 'users',
    ],
],

'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\Models\User::class,
    ],
],

二、认证和授权

1、Laravel JWT提供了一个auth:api中间件,我们可以使用它来保护我们的API路由,只有经过身份验证的用户才能访问被保护的路由。

2、在您的路由文件中使用auth:api中间件来保护需要身份验证的路由:


Route::group(['middleware' => 'auth:api'], function () {
    Route::get('/profile', 'UserController@profile');
    Route::post('/logout', 'AuthController@logout');
});

3、Laravel JWT还提供了一个jwt.auth中间件,我们可以使用它来手动验证JWT并获取当前用户。只需要在需要手动验证JWT的方法中使用jwt.auth中间件即可:


public function profile()
{
    $user = JWTAuth::parseToken()->authenticate();
    return response()->json(['user' => $user]);
}

4、Laravel JWT还提供了jwt.auth和jwt.refresh路由,我们可以使用它们来获取新的JWT令牌或者刷新过期的JWT令牌:


Route::group(['middleware' => 'api', 'prefix' => 'auth'], function ($router) {
    Route::post('login', 'AuthController@login');
    Route::post('refresh', 'AuthController@refresh');
    Route::post('logout', 'AuthController@logout');
});

5、最后是用户注册和登录的方法:


public function login(Request $request)
{
    $credentials = $request->only('email', 'password');

    if (!$token = Auth::attempt($credentials)) {
        return response()->json(['error' => 'Unauthorized'], 401);
    }

    return $this->respondWithToken($token);
}

public function register(Request $request)
{
    $user = new User();
    $user->name = $request->input('name');
    $user->email = $request->input('email');
    $user->password = Hash::make($request->input('password'));
    $user->save();

    $token = Auth::fromUser($user);

    return $this->respondWithToken($token, 201);
}

三、JWT黑名单

1、Laravel JWT提供了一个JWT黑名单,我们可以使用它来撤销JWT。当一个JWT被加入到黑名单中,它就不能再被使用。

2、使用Laravel JWT的JWT黑名单需要进行以下配置:

(1)在config/jwt.php文件中将denylist中间件的启用状态设置为true:


'denylist_enabled' => true,

(2)在config/jwt.php文件中配置JWT黑名单的时间:


'ttl' => env('JWT_TTL', 60),
'refresh_ttl' => env('JWT_REFRESH_TTL', 20160),
'blacklist_enabled' => env('JWT_BLACKLIST_ENABLED', true),
'blacklist_grace_period' => env('JWT_BLACKLIST_GRACE_PERIOD', 0),

(3)运行以下命令进行JWT黑名单的迁移:


php artisan jwt:secret
php artisan jwt:blacklist:install

3、现在您可以在需要撤销JWT的时候使用以下方法:


public function logout(Request $request)
{
    JWTAuth::invalidate($request->bearerToken());
    return response()->json(['message' => 'Successfully logged out']);
}

四、自定义响应

1、默认情况下,Laravel JWT返回的响应是JSON格式的,如果您需要自定义响应格式或者添加一些额外的响应头(如Token-Expired),您可以自己定义RespondWithToken方法:


protected function respondWithToken($token, $code = 200)
{
    return response()->json([
        'access_token' => $token,
        'token_type' => 'bearer',
        'expires_in' => JWTAuth::factory()->getTTL() * 60
    ], $code);
}

2、在您的控制器方法中使用respondWithToken方法来自定义响应:


public function login(Request $request)
{
    $credentials = $request->only('email', 'password');

    if (!$token = Auth::attempt($credentials)) {
        return response()->json(['error' => 'Unauthorized'], 401);
    }

    return $this->respondWithToken($token);
}

五、总结

本文详细阐述了如何使用Laravel JWT进行基于JWT的身份验证和授权。从安装和配置、认证和授权、JWT黑名单和自定义响应等多个方面讲解了Laravel JWT的使用方法和注意事项。希望本文能够帮助您更好地使用Laravel JWT。

原创文章,作者:DSOHJ,如若转载,请注明出处:https://www.506064.com/n/368130.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
DSOHJ的头像DSOHJ
上一篇 2025-04-11 14:01
下一篇 2025-04-12 01:12

相关推荐

  • JWT验证Token的实现

    本文将从以下几个方面对JWT验证Token进行详细的阐述,包括:JWT概述、JWT验证Token的意义、JWT验证Token的过程、JWT验证Token的代码实现、JWT验证Tok…

    编程 2025-04-29
  • JWT String Argument Cannot Be Null or Empty

    JWT(JSON Web Token)是一种用于进行身份验证的标准。在使用JWT时,经常会遇到“JWT String Argument Cannot Be Null or Empt…

    编程 2025-04-27
  • 从多方面详解JWT解密

    一、JWT解密工具 在进行JWT解密之前,我们需要先了解一些JWT解密工具。目前市面上有很多免费的在线JWT解密工具,比如https://jwt.io/、https://www.j…

    编程 2025-04-22
  • Laravel任务调度的探讨

    一、任务调度简介 任务调度是指在应用程序中预定、计划和执行任务的过程。Laravel任务调度器提供了一种友好的方式来注册定期运行的任务,而不需要借助操作系统的Cron语法。任务调度…

    编程 2025-04-22
  • 从多个方面详细阐述JWT退出登录

    一、JWT退出登录概述 JWT(JSON Web Token)是一种轻量级的认证和授权机制,常用于RESTful API服务中。用户在登录成功后,服务器会对用户进行认证并生成一个J…

    编程 2025-04-12
  • Laravel漏洞详解

    Laravel是PHP开发中一款十分热门的开发框架,它在便捷性、扩展性以及功能上都有着不错的表现。作为开发者,在使用Laravel时需要关注它的安全性,因为Laravel也存在漏洞…

    编程 2025-04-12
  • 使用JWT:一个全面的指南

    一、什么是JWT? JSON Web Token(JWT)是一个轻量级的身份验证和授权的工具,它在应用程序间传输信息。它以JSON格式表示,包含了必要的签名和安全验证信息。JWT由…

    编程 2025-04-12
  • Java JWT认证详解

    1. JWT简介 JSON Web Token(JWT),是一种开放的标准(RFC 7519)。 JWT可以在通信双方之间安全地传递用户身份信息,同时因为它是开放的标准,所以可以被…

    编程 2025-04-02
  • Spring Boot Json Web Token (JWT)

    在现代的Web应用程序中,一种安全的身份验证机制是必不可少的。其中最流行的是使用Token的身份验证机制,而Json Web Token (JWT)则是其中最常用的一种标准。在Sp…

    编程 2025-02-25
  • Laravel Cache详解

    一、Cache概述 Laravel为开发者提供了强大的缓存支持,同时支持多种缓存器,如文件缓存器、memcached缓存器、redis缓存器等等。通过使用Laravel的缓存功能可…

    编程 2025-02-24

发表回复

登录后才能评论