jwt获取token_Laravel 安装 jwt 及基本使用

本文详细介绍了如何在Laravel 5.5中安装和配置JWT Auth,包括composer安装、服务提供者注册、密钥生成、authguard设置、Usermodel修改和API中间件的实现。通过登录、信息获取与退出示例,展示了JWT在API安全中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是jwt?

JSON Web Token(JWT)是一个开放标准(RFC 7519),它定义了一种紧凑且独立的方式,用于在各方之间作为JSON对象安全地传输信息。此信息可以通过数字签名进行验证和信任。JWT可以使用秘密(使用HMAC算法)或使用RSA或ECDSA的公钥/私钥对进行签名。

jwt简介链接 JWT.IO - JSON Web Tokens Introduction

我们在做api请求的时候,通常要使用token,来验证是否这个请求能不能访问。

一旦用户登录,后续每个请求都将包含JWT,允许用户访问该令牌允许的路由、服务和资源。单点登录是现在广泛使用的JWT的一个特性,因为它的开销很小,并且可以轻松地跨域使用。

本文中所使用的版本

Laravel 5.5

jwt-auth 1.0.0-rc.1(在安装中也参考了很多文章 其他版本一直配置的不太顺利,这个版本比较好点)

开始安装jwt

(本次安装不建议直接在项目中安装及使用)

1.composer 安装jwt

composer require tymon/jwt-auth 1.0.0-rc.1

2.在config 文件夹的app.php 中注册服务提供者,经测试,不需要这步

'providers' 

3.生成配置文件

php artisan vendor:publish --provider="TymonJWTAuthProvidersLaravelServiceProvider"

4.生成jwt 密钥

php artisan jwt:secret

然后会在我们的 .env 文件中生成jwt密钥

e987c3e4c96dd96199ada143670e19aa.png

5.在auth.php 文件中 配置 auth guard 让api的driver使用jwt

 
  1. 'guards' => [

  2. 'web' => [

  3. 'driver' => 'session',

  4. 'provider' => 'users',

  5. ],

  6. 'api' => [

  7. 'driver' => 'jwt',//更改此处为jwt

  8. 'provider' => 'users',

  9. ],

  10. ],

6.更改 User model使其支持 jwt-auth

 
  1. <?php

  2. namespace App;

  3. use TymonJWTAuthContractsJWTSubject;

  4. use IlluminateNotificationsNotifiable;

  5. use IlluminateFoundationAuthUser as Authenticatable;

  6. class User extends Authenticatable implements JWTSubject

  7. {

  8. use Notifiable;

  9. protected $table = 'users';

  10. /**

  11. * Get the identifier that will be stored in the subject claim of the JWT.

  12. *

  13. * @return mixed

  14. */

  15. public function getJWTIdentifier()

  16. {

  17. return $this->getKey();

  18. }

  19. /**

  20. * Return a key value array, containing any custom claims to be added to the JWT.

  21. *

  22. * @return array

  23. */

  24. public function getJWTCustomClaims()

  25. {

  26. return [];

  27. }

7.配置 中间件

在 Middleware 文件夹下新建 ApiAuth.php 中间件文件

 
  1. <?php

  2. namespace AppHttpMiddleware;

  3. use Closure;

  4. use TymonJWTAuthFacadesJWTAuth;

  5. use TymonJWTAuthExceptionsJWTException;

  6. use TymonJWTAuthExceptionsTokenExpiredException;

  7. use TymonJWTAuthExceptionsTokenInvalidException;

  8. class ApiAuth

  9. {

  10. /**

  11. * Handle an incoming request.

  12. *

  13. * @param IlluminateHttpRequest $request

  14. * @param Closure $next

  15. * @return mixed

  16. */

  17. public function handle($request, Closure $next)

  18. {

  19. try {

  20. if (! $user = JWTAuth::parseToken()->authenticate()) { //获取到用户数据,并赋值给$user

  21. return response()->json([

  22. 'errcode' => 1004,

  23. 'errmsg' => '无此用户'

  24. ], 404);

  25. }

  26. return $next($request);

  27. } catch (TokenExpiredException $e) {

  28. return response()->json([

  29. 'errcode' => 1003,

  30. 'errmsg' => 'token 过期' , //token已过期

  31. ]);

  32. } catch (TokenInvalidException $e) {

  33. return response()->json([

  34. 'errcode' => 1002,

  35. 'errmsg' => 'token 无效', //token无效

  36. ]);

  37. } catch (JWTException $e) {

  38. return response()->json([

  39. 'errcode' => 1001,

  40. 'errmsg' => '缺少token' , //token为空

  41. ]);

  42. }

  43. }

  44. }

注册中间件 在 Kernel.php 中注册中间件 并设置别名

 
  1. protected $routeMiddleware = [

  2. 'api.auth' => AppHttpMiddlewareApiAuth::class,

  3. ];

到此你的jwt就算安装配置完成了

**基本使用**

1.新建AuthCtorller.php 控制器

php artisan make:controller AuthController

2.编辑 测试控制器

 
  1. <?php

  2. namespace AppHttpControllers;

  3. use AppUser;

  4. use IlluminateHttpRequest;

  5. use TymonJWTAuthFacadesJWTAuth;

  6. use IlluminateSupportFacadesHash;

  7. class AuthController extends Controller

  8. {

  9. /**

  10. * jwt 测试

  11. */

  12. //登录

  13. public function login(Request $request){

  14. $username = $request->get('username');

  15. $password = $request->get('password');

  16. $user_mes = User::where('username','=',$username)->first();

  17. if (!$user_mes || !Hash::check($password, $user_mes->password)) {

  18. return "账号或密码错误";

  19. }

  20. $token=JWTAuth::fromUser($user_mes);//生成token

  21. if (!$token) {

  22. return "登录失败,请重试";

  23. }

  24. return response()->json(['token'=>$token]);

  25. }

  26. //获取用户信息

  27. public function home(){

  28. $user=JWTAuth::parseToken()->touser();//获取用户信息

  29. return $user;

  30. }

  31. //退出

  32. public function logout(){

  33. JWTAuth::parseToken()->invalidate();//退出

  34. return '退出成功';

  35. }

  36. }

3.编辑路由

 
  1. <?php

  2. Route::post('/login','AuthController@login');//登录

  3. Route::group(['middleware' => 'api.auth'], function () {

  4. Route::post('/home','AuthController@home');//获取用户信息

  5. Route::post('/logout','AuthController@logout');//退出

  6. });

4.开始测试

测试登录 /api/login 这里就成功的拿到了token

55c5bc54406f08717c1fe56ea16f0d0f.png

获取用户信息 /api/home

d4b70d8babd9d38e4d5f9dbf230b429c.png

退出 /api/logout

855519cb91dfe964cecb3d96b33e922c.png

再次访问 /api/home 就会发现token 无效

bb7186c7a4594e3fca6b1fcdcc9914eb.png

**其他** - 设置token 永不过期

在jwt.php 中 找到此处把过期时间设置为null

d8a45f9ba12c68bcd89a0f3dbb2bd1b7.png

在这个地方删除exp 即可设置token 永不过期

c76d9360b9417cef25450353a8dd9d03.png

本文来自

杨攀遥博客_个人技术博客_分享我的编程之路​www.yangpanyao.com

如若转载,无需和我联系,但请注明出处:

Laravel 安装 jwt 及基本使用​www.yangpanyao.com

相关资源:laravel5.5安装jwt-auth生成token令牌的示例-其它代码类资源-CSDN...

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值