首页 > 解决方案 > 环境变量在 Laravel 的 FirebaseController 中工作异常

问题描述

我正在尝试将我的本地主机应用程序连接到 firebase。

firebase 控制器可以使用以下代码正常工作:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Kreait\Firebase;
use Kreait\Firebase\Factory;
use Kreait\Firebase\ServiceAccount;
use Kreait\Firebase\Database;


class FirebaseController extends Controller
{
    protected $database;

    public function __construct()
    {
        $this->database = app('firebase.database');
    }

    public function index()
    {     
        $factory = (new Factory)
            ->withServiceAccount(__DIR__ . env('GOOGLE_APPLICATION_CREDENTIALS'))
            ->withDatabaseUri(env('DATABASE_URI'));


        $database = $factory->createDatabase();

        $newPost = $database
            ->getReference('blog/posts')
            ->push([
                'title' => 'Post title',
                'body' => 'This should probably be longer.'
            ]);


        echo "<pre>";
        print_r($newPost->getvalue());
    }
}

但是当我从以下位置更改 .env 中的环境变量时:

FIREBASE_CREDENTIALS=FirebaseKey.json
GOOGLE_APPLICATION_CREDENTIALS=/FirebaseKey.json

FIREBASE_CREDENTIALS=/FirebaseKey.json
GOOGLE_APPLICATION_CREDENTIALS=/FirebaseKey.json

by 只加了一个正斜线FIREBASE_CREDENTIALS,突然页面裂开。错误:

Kreait\Firebase\Exception\InvalidArgumentException
Invalid service account: /FirebaseKey.json can not be read:
SplFileObject::__construct(/FirebaseKey.json): Failed to open stream: No such file or directory

我实际上没有FIREBASE_CREDENTIALS在其他任何地方使用该变量,或者我不应该在.env文件中声明这个变量?

而且,当我替换GOOGLE_APPLICATION_CREDENTIALSwithFIREBASE_CREDENTIALS并更改文件中的FIREBASE_CREDENTIALSandGOOGLE_APPLICATION_CREDENTIALS的值时.env,如下所示:

FIREBASE_CREDENTIALS=/FirebaseKey.json
GOOGLE_APPLICATION_CREDENTIALS=/FirebaseKey.json

它将显示相同的错误。

Kreait\Firebase\Exception\InvalidArgumentException
Invalid service account: /FirebaseKey.json can not be read: 
SplFileObject::__construct(/FirebaseKey.json): Failed to open stream: No such file or directory

所以问题是为什么使用FIREBASE_CREDENTIALS变量,然后它无法读取 .json 文件,但使用GOOGLE_APPLICATION_CREDENTIALS一切都很好?

这是目录的屏幕截图

标签: phpjsonlaravelfirebaseenvironment-variables

解决方案


推荐阅读