You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 8 集成JWT实现登录功能 如何通过web.php路由生成JWT Token

Laravel 8 结合 JWT 生成登录 Token 实现方案

1 前置配置(未完成JWT配置需先执行)

  • 安装适配Laravel 8的JWT扩展:
    composer require tymon/jwt-auth:^1.0
  • 发布扩展配置文件:
    php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"
  • 生成JWT加密密钥:
    php artisan jwt:secret
  • 调整User模型实现JWT接口,修改app/Models/User.php代码:
<?php

namespace App\Models;

use Tymon\JWTAuth\Contracts\JWTSubject;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable implements JWTSubject
{
    // 原有模型代码保持不变
    
    // 新增以下两个方法
    public function getJWTIdentifier()
    {
        return $this->getKey();
    }

    public function getJWTCustomClaims()
    {
        return [];
    }
}
  • 修改认证配置config/auth.php:
return [
    'defaults' => [
        'guard' => 'api', // 把默认guard改成api
        'passwords' => 'users',
    ],

    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
        // 新增api guard配置
        'api' => [
            'driver' => 'jwt',
            'provider' => 'users',
            'hash' => false,
        ],
    ],
    // 原有其他配置保持不变
];

2 完善登录控制器方法

修改你现有的login方法代码如下:

public function login(Request $request) 
{
    $email = $request->email;
    $password = $request->password;

    $data = [
        'email' => $email, 
        'password' => $password, 
    ];

    // 用你构造的认证数据生成JWT Token
    if (! $token = auth('api')->attempt($data)) {
        // 认证失败返回错误
        return response()->json(['error' => '账号或密码错误'], 401);
    }

    // 认证成功返回token和相关信息
    return response()->json([
        'access_token' => $token,
        'token_type' => 'bearer',
        'expires_in' => auth('api')->factory()->getTTL() * 60
    ]);
}

3 web.php定义登录路由

在routes/web.php中添加如下路由配置:

use App\Http\Controllers\你的控制器实际名称;

// 登录路由,如果需要跳过csrf验证,可以把路由添加到App\Http\Middleware\VerifyCsrfToken的$except数组中
Route::post('/login', [你的控制器实际名称::class, 'login']);

注意:web路由默认开启csrf校验,如果你是用postman等工具调试接口,需要将/login路径加入app/Http/Middleware/VerifyCsrfToken.php的$except属性中排除校验。

调用说明

发送POST请求到/login路径,携带email和password参数,验证通过后即可获取到JWT Token,后续请求在请求头中携带Authorization: Bearer 你的Token即可完成身份校验。

内容的提问来源于stack exchange,提问作者user12541100

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 12:54:04