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

Laravel 9项目对接Firebase手机号认证可行性咨询

Laravel 9 对接 Firebase 手机号认证方案

可以实现对接,但纯PHP后端无法完成完整的手机号认证流程——Firebase手机号认证的验证码发送环节依赖客户端(前端)的reCAPTCHA验证或应用验证机制,后端仅能配合完成最终的令牌校验与Laravel用户体系的对接。

核心流程说明

Firebase手机号认证的标准流程必须分为两步:

  1. 前端触发验证码发送与验证,获取Firebase的ID Token
  2. Laravel后端验证该ID Token,同步用户数据并生成Laravel本地认证会话

具体实现步骤

1. 前端完成验证码发送与ID Token获取

使用Firebase JS SDK完成以下操作:

  • 初始化Firebase SDK
  • 调用signInWithPhoneNumber发送验证码到用户手机号
  • 用户输入验证码后,调用confirmVerificationCode获取认证凭证
  • 通过user.getIdToken()获取Firebase ID Token,发送到Laravel后端接口

2. Laravel后端对接配置与实现

安装依赖

安装Firebase PHP SDK及Laravel适配包:

composer require kreait/firebase-php kreait/laravel-firebase
配置Firebase服务账号

将Firebase控制台下载的服务账号JSON文件放到项目storage/app/firebase目录下,在.env中配置路径:

FIREBASE_CREDENTIALS=storage/app/firebase/service-account.json
创建认证接口控制器

编写控制器方法验证Firebase ID Token并同步Laravel用户:

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Kreait\Firebase\Auth;
use Illuminate\Support\Facades\Auth as LaravelAuth;
use App\Models\User;

class FirebasePhoneAuthController extends Controller
{
    public function verifyToken(Request $request)
    {
        $request->validate([
            'id_token' => 'required|string',
        ]);

        $firebaseAuth = app(Auth::class);

        try {
            // 验证Firebase ID Token
            $verifiedToken = $firebaseAuth->verifyIdToken($request->id_token);
            $firebaseUid = $verifiedToken->claims()->get('sub');
            $phoneNumber = $verifiedToken->claims()->get('phone_number');

            // 查找或创建Laravel用户
            $user = User::firstOrCreate(
                ['firebase_uid' => $firebaseUid],
                ['phone_number' => $phoneNumber, 'name' => '用户_' . substr($phoneNumber, -4)]
            );

            // 登录Laravel用户
            LaravelAuth::login($user);

            // 返回Laravel认证令牌(以Sanctum为例)
            return response()->json([
                'user' => $user,
                'access_token' => $user->createToken('PhoneAuth')->plainTextToken,
                'token_type' => 'Bearer'
            ]);
        } catch (\Kreait\Firebase\Exception\Auth\InvalidIdToken $e) {
            return response()->json(['error' => '无效的认证令牌'], 401);
        } catch (\Exception $e) {
            return response()->json(['error' => '认证失败'], 500);
        }
    }
}
配置路由

在routes/api.php中添加接口路由:

use App\Http\Controllers\Auth\FirebasePhoneAuthController;

Route::post('/auth/firebase-phone/verify', [FirebasePhoneAuthController::class, 'verifyToken']);

关键说明

  • 无法绕开前端:Firebase的手机号认证要求客户端提供reCAPTCHA令牌或应用验证信息,后端无法直接调用短信发送API,因此必须依赖前端完成验证码环节。
  • 用户数据同步:通过Firebase ID Token中的phone_number和sub(Firebase用户ID)字段,可在Laravel中创建或关联本地用户,实现双端用户体系的统一。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 08:25:20