Quantcast
Channel: Active questions tagged rest - Stack Overflow
Viewing all articles
Browse latest Browse all 3663

Can we CRUD and perform custom queries in Google Firestore with PHP?

$
0
0

I'm trying to connect PHP - codeigniter with google Firebaseas my android app has authentication with firebase,my Web application will use the same Auth

its Firestore not real time database

I want to perform CRUD operation through PHP

I used the following links and code,

I can authenticate using the login and verify_id_token functions

But can't read collections

-- please read comment in AuthController->get_user_info()

I'm using

https://github.com/kreait/firebase-phpkreait/firebase-php

https://cloud.google.com/php/docs/reference/cloud-firestore/latestgoogle\Cloud\Firestore\FirestoreClient;

this is my Helper.php

<?phpuse Kreait\Firebase\Factory;use Kreait\Firebase\Auth;use Google\Cloud\Firestore\FirestoreClient;function firebase_auth() {    static $auth = null;    if ($auth === null) {        $serviceAccount = __DIR__ . '/../config/somthing.json'; // Adjust path as needed        $factory = (new Factory)->withServiceAccount($serviceAccount);        $auth = $factory->createAuth(); // Use the Factory from Kreait\Firebase    }    return $auth;}function create_firestore(string $projectId = null) {    static $firestore = null;    if ($firestore === null) {        try {            $serviceAccount = __DIR__ . '/../config/somthing.json';            $firestore = new FirestoreClient(['projectId' => $projectId, // Set project ID if needed            ]); // Directly create FirestoreClient        } catch (Exception $e) {            // Handle the exception, e.g., log the error or throw a custom exception            echo "Error creating Firestore client: " . $e->getMessage();        }    }    return $firestore;}

This is my Authcontroller

<?phpuse Monolog\Handler\StreamHandler;use Monolog\Logger;class AuthController extends CI_Controller {    private $logger;    public function __construct() {        parent::__construct();        $this->logger = new Logger('FirestoreLogger');        $this->logger->pushHandler(new StreamHandler(APPPATH . 'logs/firestore_debug.log', Logger::DEBUG));    }    public function verify_id_token($idToken) {        try {            $auth = firebase_auth();            $verifiedIdToken = $auth->verifyIdToken($idToken);            return $verifiedIdToken->claims()->get('sub'); // Return the UID        } catch (\Kreait\Firebase\Exception\AuthException $e) {            echo "Token verification failed: " . $e->getMessage();            return null; // Token verification failed        } catch (\Kreait\Firebase\Exception\FirebaseException $e) {            echo "Firebase error: " . $e->getMessage();            return null; // Token verification failed        }    }    public function login() {        $email = 'nuked.hacker@gmail.com';         $password = 'abc123';        try {            $auth = firebase_auth();            // Attempt to sign in the user            $signInResult = $auth->signInWithEmailAndPassword($email, $password);            // Retrieve the ID token            $idToken = $signInResult->idToken();            // Store the ID token in session or return it to the client            $_SESSION['idToken'] = $idToken; // Example of storing in session            echo "User signed in successfully. ID Token: " . $idToken;        } catch (\Kreait\Firebase\Exception\AuthException $e) {            echo "Authentication failed: " . $e->getMessage();        } catch (\Kreait\Firebase\Exception\FirebaseException $e) {            echo "Firebase error: " . $e->getMessage();        }    }    public function get_user_info($uid) {        // Retrieve the ID token from session or request        $idToken = isset($_SESSION['idToken']) ? $_SESSION['idToken'] : null;        // Verify the ID token        $verifiedUid = $this->verify_id_token($idToken);        if ($verifiedUid === null) {            echo "User is not authenticated.";            return;        }        // Check UID authorization        if ($verifiedUid !== $uid) {            echo "You are not authorized to access this user data.";            return;        }        try {            // Initialize Firestore            $firestore = create_firestore('tracingapp-13543');            // Attempt to access document            $collection = $firestore->collection('users');            $document = $collection->document($uid);            $userDocument = $document->snapshot();//when i use above line it shows me site can't be reached            if ($userDocument->exists()) {                $userData = $userDocument->data();                echo "User Info: ";                print_r($userData);            } else {                echo "User does not exist.";            }        } catch (\Kreait\Firebase\Exception\FirebaseException $e) {            $this->logger->error("Firestore Error: " . $e->getMessage());            echo "An error occurred. Check logs for details.";        }    }}

what am i doing wrong

$userDocument = $document->snapshot();

this line says site isn't working
there is no error or debug any where, (apache logs, CI logs, monologs)

When print_r above code before this line, i.e $document i get an object

But when i use snapshot, it says site isn't working

Yes I can open firebase console


Viewing all articles
Browse latest Browse all 3663

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>