如何使用firebase sdk验证用户身份

时间:2017-08-17 11:51:38

标签: codeigniter firebase firebase-realtime-database firebase-authentication

我正在使用此SDK并遵循此documentation。现在我正在尝试在firebase db中创建和验证用户。我怎么能这样做。我在Codeigniter做项目,在我的控制器中我做了这个:

    public function register()
    {
    $firebase = (new Firebase\Factory())->create();

    $tokenHandler = $firebase->getTokenHandler();

    $uid = 'a-uid';
    $claims = ['foo' => 'bar']; // optional

    // Returns a Lcobucci\JWT\Token instance
    $customToken = $tokenHandler->createCustomToken($uid, $claims);
    echo $customToken; // "eyJ0eXAiOiJKV1..."

    $idTokenString = 'eyJhbGciOiJSUzI1...';
    // Returns a Lcobucci\JWT\Token instance
    $idToken = $tokenHandler->verifyIdToken($idTokenString);

    $uid = $idToken->getClaim('sub');

    echo $uid; // 'a-uid'
    } 

我调用了函数它给了我这个错误:

    Type: Kreait\Firebase\Exception\ServiceAccountDiscoveryFailed
    Message: Kreait\Firebase\ServiceAccount\Discovery\FromEnvironmentVariable: The environment variable "FIREBASE_CREDENTIALS" is not set. Kreait\Firebase\ServiceAccount\Discovery\FromEnvironmentVariable: The environment variable "GOOGLE_APPLICATION_CREDENTIALS" is not set. Kreait\Firebase\ServiceAccount\Discovery\FromGoogleWellKnownFile: The well known file is not readable or invalid

  Filename: E:\xampp\htdocs\firebasedb\vendor\kreait\firebase-
  php\src\Firebase\ServiceAccount\Discoverer.php

  Line Number: 48

任何人都可以帮我解决这个问题吗?任何形式的帮助表示赞赏。感谢。

修改 好吧,我用这样的默认.json文件路径解决了这个问题:

  $serviceAccount = ServiceAccount::fromJsonFile(JSON_FILE_PATH.'google-service-account.json');
  $firebase = (new Factory)
  ->withServiceAccount($serviceAccount)
  ->create();

现在可以从网络应用注册新用户吗?任何人都可以帮忙。我一直在这个问题上停止了。非常感谢帮助。

3 个答案:

答案 0 :(得分:1)

您设置了JSON密钥环境变量 FIREBASE_CREDENTIALS GOOGLE_APPLICATION_CREDENTIALS

  

尝试阅读此Firebase Admin SDK for PHP Setup

答案 1 :(得分:0)

摘自文档https://firebase-php.readthedocs.io/en/latest/authentication.html#authenticate-with-admin-privileges

有两个要注意的要点。

  1. 通过使用Firebase实时数据库和Cloud Storage的安全规则,可以完成许多用于验证服务器上ID令牌的用例。在亲自验证ID令牌之前,先看看这些解决方案是否解决了您的问题。
  2. Firebase Admin SDK中包含的ID令牌验证方法旨在验证来自客户端SDK的ID令牌,而不是您使用Admin SDK创建的自定义令牌。签出{{3 }}

关于用户: 来自https://firebase.google.com/docs/auth/users/#auth_tokens 你有一个样本

$request = \Kreait\Auth\Request\CreateUser::new()
->withUnverifiedEmail('user@example.com')
->withPhoneNumber('+15555550100')
->withClearTextPassword('secretPassword')
->withDisplayName('John Doe')
->withPhotoUrl('http://www.example.com/12345678/photo.png');
$createdUser = $auth->createUser($request);

请注意:

  

默认情况下,Firebase身份验证将为新用户生成一个随机uid。如果您想为新用户指定自己的uid,则可以在传递给用户创建方法的属性中进行添加:

$properties = [
        'uid' => 'some-uid',
            // other properties
    ];
    $request = \Kreait\Auth\Request\CreateUser::new()
            ->withUid('some-uid')
    // with other properties
    ;

答案 2 :(得分:0)

在我的情况下,我遇到了 Laravel 的相同问题,这是解决方案:

首先将您从Firebase项目获得的.json凭据文件保存到与.env文件相同级别的Laravel应用的根目录中。

json文件看起来像you-file-firebase-adminsdk-0000-9845985498a.json

然后打开.env文件并创建一个新的环境变量,然后粘贴json凭据文件名。

FIREBASE_CREDENTIALS=../you-file-firebase-adminsdk-0000-9845985498a.json