Laravel 中怎么实现 JWT 身份验证-icode9专业技术文章分享

2024/10/20 6:03:10

本文主要是介绍Laravel 中怎么实现 JWT 身份验证-icode9专业技术文章分享,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

在 Laravel 中使用 JWT(JSON Web Token)进行身份验证是一个常见的需求,尤其是在 API 开发中。这里有一个简单的指南,帮助你在 Laravel 项目中实现 JWT 身份验证。

步骤 1:安装 Laravel-JWT 包

推荐使用 tymon/jwt-auth 这个包来实现 JWT 身份验证。首先,通过 Composer 安装它:

composer require tymon/jwt-auth

Bash

步骤 2:发布配置文件

安装完成后,发布 JWT 配置文件:

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

Bash

这将在 config 目录下生成 jwt.php 文件。

步骤 3:生成密钥

接下来,你需要生成 JWT 密钥。运行以下命令:

php artisan jwt:secret

Bash

这将生成一个新的密钥并将其添加到 .env 文件中,密钥通常是以 JWT_SECRET 作为键。

步骤 4:配置 Auth

在 config/auth.php 中更新 guards 部分,将 api 作为 JWT 驱动:

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

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

PHP

步骤 5:创建控制器

在你的项目中创建一个控制器,来处理用户注册和登录等功能:

php artisan make:controller AuthController

Bash

在 AuthController 中,你可以编写如下代码:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\User;
use Tymon\JWTAuth\Facades\JWTAuth;
use Tymon\JWTAuth\Exceptions\JWTException;

class AuthController extends Controller
{
    public function register(Request $request)
    {
        $request->validate([
            'name' => 'required|string|max:255',
            'email' => 'required|string|email|max:255|unique:users',
            'password' => 'required|string|min:6|confirmed',
        ]);

        $user = User::create([
            'name' => $request->name,
            'email' => $request->email,
            'password' => bcrypt($request->password),
        ]);

        return response()->json(['message' => 'User registered successfully'], 201);
    }

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

        try {
            if (!$token = JWTAuth::attempt($credentials)) {
                return response()->json(['error' => 'invalid_credentials'], 401);
            }
        } catch (JWTException $e) {
            return response()->json(['error' => 'could_not_create_token'], 500);
        }

        return response()->json(compact('token'));
    }

    public function logout()
    {
        JWTAuth::invalidate(JWTAuth::getToken());
        return response()->json(['message' => 'User logged out'], 200);
    }

    public function me()
    {
        return response()->json(auth()->user());
    }
}

PHP

步骤 6:定义路由

在 routes/api.php 中定义路由,以便用户可以注册、登录、查看个人信息等:

use App\Http\Controllers\AuthController;

Route::post('register', [AuthController::class, 'register']);
Route::post('login', [AuthController::class, 'login']);
Route::get('logout', [AuthController::class, 'logout'])->middleware('auth:api');
Route::get('me', [AuthController::class, 'me'])->middleware('auth:api');

PHP

步骤 7:保护路由

通过在路由中使用 middleware('auth:api'),你可以保护特定的 API 路由,确保用户必须通过 JWT 身份验证才能访问。

步骤 8:使用 Postman 或其他工具测试

现在你可以使用 Postman 进行 API 测试:

  1. 注册用户: 向 /api/register 发送一个 POST 请求,包含 nameemail 和 password
  2. 登录用户: 向 /api/login 发送一个 POST 请求,包含 email 和 password,你将收到一个 JWT 作为响应。
  3. 访问受保护的路由: 在请求头中将 Authorization 设置为 Bearer YOUR_JWT_TOKEN,然后可以访问 /api/me 或其他受保护的路由。

标签: 来源:

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。



这篇关于Laravel 中怎么实现 JWT 身份验证-icode9专业技术文章分享的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程