侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

Laravel 8 REST API身份验证与JWT教程示例

Laravel  /  管理员 发布于 4年前   5226

在该文中,我们将学习如何使用最新的Laravel 8版本中的JWT对REST API进行身份验证。您将学习如何使用具有JWT身份验证的Laravel 8创建rest API。

我们将了解如何在Laravel 8中设置JWT身份验证,以及如何使用tymon / jwt-auth包实施安全的REST API。

Laravel 8 JWT认证教程示例

在本教程中,我们将逐步介绍如何使用PHP和Laravel 8通过JWT令牌进行身份验证来实现REST API。


第1步-创建Laravel 8应用程序

让我们通过使用Composer创建一个Laravel 8应用程序开始本教程,该应用程序是PHP开发人员的依赖项管理工具。

转到新的命令行界面,然后运行以下命令:

$ composer create-project --prefer-dist laravel / laravel laravel8jwtapp

第2步-配置MySQL数据库

使用Composer创建Laravel 8应用程序之后,让我们在第二步中配置一个MySQL数据库。

打开位于Laravel 8'应用程序根目录中的.env文件。接下来,添加以下数据库配置信息:

DB_CONNECTION = mysql
DB_HOST = 127.0.0.1
DB_PORT = 3306
DB_DATABASE = <数据库名称>
DB_USERNAME = <数据库用户名>
DB_PASSWORD = <数据库密码>

步骤3 —安装jwt-laravel

现在,我们已经配置了MySQL数据库,并配置了Laravel 8应用程序,让我们开始通过安装jwt-auth软件包来实现JWT身份验证。

回到终端并从项目文件夹的根目录运行以下命令:

$ composer require tymon/jwt-auth

步骤4 —在Laravel 8中设置JWT身份验证

在这一步,我们有一个配置了MySQL的Laravel 8应用程序。在上一步中,我们还安装了jwt-auth库。现在,让我们在应用程序中设置JWT身份验证。

转到config / app.php文件,并添加JWT提供程序和别名,如下所示:

'providers' => [
….
'TymonJWTAuthProvidersJWTAuthServiceProvider',
],
'aliases' => [
….
'JWTAuth' => 'TymonJWTAuthFacadesJWTAuth',
'JWTFactory' => 'TymonJWTAuthFacadesJWTFactory',
],

接下来,返回您的终端并运行以下命令:

$ php artisan vendor:publish --provider="TymonJWTAuthProvidersJWTAuthServiceProvider"

步骤5 —生成JWT密钥

在我们的Laravel 8应用中配置JWT身份验证之后。在这一步中,我们需要生成一个JWT密钥。

转至您的终端并运行以下命令来生成JWT密钥:

$ php artisan jwt:generate

接下来,打开vendor / tymon / src / Commands / JWTGenerateCommand.php并进行如下更新:

public function handle() {$this->fire();}

第6步—在Laravel 8用户模型中实现JWT身份验证

在Laravel 8中配置JWT之后,在这一步中,我们将在User模型中实现它。

打开App / User.php文件,并进行如下更新:

<?php 
namespace App;
use IlluminateNotificationsNotifiable;
use IlluminateFoundationAuthUser as Authenticatable;

class User extends Authenticatable
{
   use Notifiable;
   protected $fillable = [
       'name', 'email', 'password',
   ];
   protected $hidden = [
       'password', 'remember_token',
   ];
}

步骤7 —为JWT身份验证实现REST API控制器

现在,我们在REST API应用程序中实现一个Laravel 8控制器来处理JWT身份验证。

回到您的终端并运行以下命令来生成控制器:

$ php artisan make:controller JwtAuthController

接下来,打开app / http / controllers / JwtAuthController.php文件,并添加以下方法:

<?php
namespace AppHttpControllers;

use JWTAuth;
use Validator;
use AppUser;
use IlluminateHttpRequest;
use AppHttpRequestsRegisterAuthRequest;
use TymonJWTAuthExceptionsJWTException;
use SymfonyComponentHttpFoundationResponse;

class JwtAuthController extends Controller
{
   public $token = true;
 
   public function register(Request $request)
   {
        $validator = Validator::make($request->all(),
                     [
                     'name' => 'required',
                     'email' => 'required|email',
                     'password' => 'required',  
                     'c_password' => 'required|same:password',
                    ]);  

        if ($validator->fails()) {  
              return response()->json(['error'=>$validator->errors()], 401);
           }  
       $user = new User();
       $user->name = $request->name;
       $user->email = $request->email;
       $user->password = bcrypt($request->password);
       $user->save();
 
       if ($this->token) {
           return $this->login($request);
       }
 
       return response()->json([
           'success' => true,
           'data' => $user
       ], Response::HTTP_OK);
   }
 
   public function login(Request $request)
   {
       $input = $request->only('email', 'password');
       $jwt_token = null;
 
       if (!$jwt_token = JWTAuth::attempt($input)) {
           return response()->json([
               'success' => false,
               'message' => 'Invalid Email or Password',
           ], Response::HTTP_UNAUTHORIZED);
       }
 
       return response()->json([
           'success' => true,
           'token' => $jwt_token,
       ]);
   }
 
   public function logout(Request $request)
   {
       $this->validate($request, [
           'token' => 'required'
       ]);
       try {
           JWTAuth::invalidate($request->token);
           return response()->json([
               'success' => true,
               'message' => 'User logged out successfully'
           ]);
       } catch (JWTException $exception) {
           return response()->json([
               'success' => false,
               'message' => 'Sorry, the user cannot be logged out'
           ], Response::HTTP_INTERNAL_SERVER_ERROR);
       }
   }
 
   public function getUser(Request $request)
   {
       $this->validate($request, [
           'token' => 'required'
       ]);
       $user = JWTAuth::authenticate($request->token);
 
       return response()->json(['user' => $user]);
   }
}

步骤8 —添加Laravel 8 REST API路由

现在,我们已经在Laravel 8用户模型中实现了JWT身份验证。 在此步骤中,我们将继续创建REST API路由。

打开routes / api.php文件,并进行如下更新:

Route::post('login', 'JwtAuthController@login');
Route::post('register', 'JwtAuthController@register');
Route::group(['middleware' => 'auth.jwt'], function () {
   Route::get('logout', 'JwtAuthController@logout');
   Route::get('user-info', 'JwtAuthController@getUser');
});

步骤9 —为您的Laravel 8 REST API身份验证服务

在Laravel 8 REST API应用程序中实现JWT身份验证后,让我们使用以下命令运行本地开发服务器:

$ php artisan serve

结论

在本教程中,我们逐步介绍了如何实施JWT身份验证来保护和保护使用PHP和Laravel 8创建的REST API端点。


转:https://shabang.dev/laravel-8-rest-api-authentication-with-jwt-tutorial-by-example/


  • 上一条:
    打印laravel中的最后一个查询的原生sql语句
    下一条:
    根据ip获取该ip的地址/经纬度信息,最新腾讯位置服务接口介绍
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • Laravel 11.15版本发布 - Eloquent Builder中添加的泛型(0个评论)
    • Laravel 11.14版本发布 - 新的字符串助手和ServeCommand改进(0个评论)
    • Laravel 11.12版本发布 - Artisan的`make`命令自动剪切`.php `扩展(0个评论)
    • Laravel的轻量型购物车扩展包:binafy/laravel-cart(0个评论)
    • Laravel 11.11版本发布 - 查看模型中的第三方关系:show(0个评论)
    • 近期文章
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2017-07
    • 2017-08
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-08
    • 2020-09
    • 2020-10
    • 2020-11
    • 2021-01
    • 2021-02
    • 2021-03
    • 2021-04
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-11
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-03
    • 2022-04
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-08
    • 2023-09
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-02
    • 2024-03
    • 2024-04
    • 2024-05
    • 2024-06
    • 2024-07
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客