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

Laravel API集成Firebase Token认证替代JWT的技术实现咨询

嘿,我刚好折腾过类似的需求,把Firebase Token集成到Laravel里,实现和jwt-auth中间件一样的认证效果,给你一步步拆解:

第一步:先搞定Firebase PHP SDK的安装和配置

首先得把Firebase的PHP工具包装到Laravel项目里,运行这个命令:

composer require kreait/firebase-php kreait/firebase-tokens

接下来去Firebase控制台下载你的服务账号JSON文件(就是那个包含私钥的文件),把它放到Laravel的storage/app目录下,比如命名为firebase-service-account.json。

然后可以在config目录下新建一个firebase.php配置文件,内容大概是这样:

<?php

return [
    'credentials' => storage_path('app/firebase-service-account.json'),
];

这样Laravel就能加载到Firebase的认证配置了。

第二步:创建自定义的Firebase认证中间件

因为要和jwt-auth的中间件用法保持一致,我们自己写一个中间件来处理Firebase Token的验证。运行命令生成中间件:

php artisan make:middleware AuthenticateWithFirebaseToken

打开生成的app/Http/Middleware/AuthenticateWithFirebaseToken.php,把handle方法改成这样:

public function handle(Request $request, Closure $next)
{
    // 从请求头里获取Bearer Token,和jwt-auth的方式一样
    $token = $request->bearerToken();

    if (!$token) {
        return response()->json(['message' => 'Unauthorized'], 401);
    }

    try {
        // 用Firebase SDK验证Token的合法性
        $verifiedToken = app('firebase.jwt')->verifyIdToken($token);
        $uid = $verifiedToken->getClaim('sub');

        // 这里根据Firebase的uid找你Laravel数据库里的用户
        // 如果是首次登录的第三方用户,可以自动创建账号
        $user = User::firstOrCreate(
            ['firebase_uid' => $uid],
            ['name' => $verifiedToken->getClaim('name'), 'email' => $verifiedToken->getClaim('email')]
        );

        // 把用户登录到Laravel的Auth系统里
        Auth::login($user);

        return $next($request);
    } catch (\Exception $e) {
        return response()->json(['message' => 'Invalid or expired token'], 401);
    }
}

这里的逻辑和jwt-auth类似:验证Token,找到/创建用户,然后让用户通过认证。

第三步:注册中间件,让它能像jwt.auth一样用

打开app/Http/Kernel.php,在$routeMiddleware数组里加一行:

'firebase.auth' => \App\Http\Middleware\AuthenticateWithFirebaseToken::class,

现在你就可以在路由里直接用这个中间件了,比如:

Route::get('/api/protected', function () {
    return response()->json(['user' => Auth::user()]);
})->middleware('firebase.auth');

完全和你之前用jwt.auth的方式一样!

第四步:前端Angular那边的配合

前端用Firebase Auth完成谷歌/推特登录后,获取到ID Token,然后在请求API的时候,把Token放到请求头里:

// 假设你已经通过Firebase Auth拿到了user对象
const token = await user.getIdToken();

// 给HTTP请求加Authorization头
this.http.get('/api/protected', {
    headers: new HttpHeaders().set('Authorization', `Bearer ${token}`)
});

这和你之前传JWT Token的方式完全一致,前端几乎不用改太多代码。

一些额外的小提示
  • 记得处理Token过期的情况:Firebase的ID Token默认有效期是1小时,前端可以监听Token过期事件,自动刷新Token。
  • 如果需要和原来的jwt-auth共存,可以在路由里根据需求选择不同的中间件,或者写一个统一的中间件兼容两种Token。
  • 数据库里要给User表加个firebase_uid字段,用来关联Firebase的用户ID。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:08:03