kreait / laravel-firebase

A Laravel package for the Firebase PHP Admin SDK
https://github.com/kreait/firebase-php
MIT License
994 stars 163 forks source link

how to remove image from firebase using download url? #190

Closed SRLQNL closed 12 months ago

SRLQNL commented 12 months ago

Describe the bug

how to remove image from firebase using download url?

Installed packages

{
    "name": "laravel/laravel",
    "type": "project",
    "description": "The Laravel Framework.",
    "keywords": ["framework", "laravel"],
    "license": "MIT",
    "require": {
        "php": "^8.0.2",
        "google/cloud-firestore": "^1.34",
        "google/cloud-storage": "^1.31",
        "guzzlehttp/guzzle": "^7.2",
        "kreait/laravel-firebase": "5.2.0",
        "laravel/framework": "^9.19",
        "laravel/sanctum": "^3.0",
        "laravel/tinker": "^2.7"
    },
    "require-dev": {
        "fakerphp/faker": "^1.9.1",
        "laravel/pint": "^1.0",
        "laravel/sail": "^1.0.1",
        "mockery/mockery": "^1.4.4",
        "nunomaduro/collision": "^6.1",
        "phpunit/phpunit": "^9.5.10",
        "spatie/laravel-ignition": "^1.0"
    },
    "autoload": {
        "psr-4": {
            "App\\": "app/",
            "Database\\Factories\\": "database/factories/",
            "Database\\Seeders\\": "database/seeders/"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "Tests\\": "tests/"
        }
    },
    "scripts": {
        "post-autoload-dump": [
            "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
            "@php artisan package:discover --ansi"
        ],
        "post-update-cmd": [
            "@php artisan vendor:publish --tag=laravel-assets --ansi --force"
        ],
        "post-root-package-install": [
            "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
        ],
        "post-create-project-cmd": [
            "@php artisan key:generate --ansi"
        ]
    },
    "extra": {
        "laravel": {
            "dont-discover": []
        }
    },
    "config": {
        "optimize-autoloader": true,
        "preferred-install": "dist",
        "sort-packages": true,
        "allow-plugins": {
            "pestphp/pest-plugin": true
        }
    },
    "minimum-stability": "stable",
    "prefer-stable": true
}

PHP version and extensions

php 8.1

Steps to reproduce the issue.

-

Error message/Stack trace

how to remove image from firebase using download url?

Additional information

`<?php

namespace App\Http\Controllers;

use Kreait\Firebase\Exception\Auth\FailedToVerifyToken; use Kreait\Firebase\Contract\Storage; use Illuminate\Http\Request; use Illuminate\Support\Facades\Session; use Kreait\Firebase\Factory; use Kreait\Firebase\Auth; use Firebase\Auth\Token\Exception\InvalidToken; use Kreait\Firebase\Exception\Auth\RevokedIdToken; use Google\Cloud\Firestore\FirestoreClient; use Kreait\Firebase\Auth\CreateSessionCookie\FailedToCreateSessionCookie; use Kreait\Laravel\Firebase\Facades\Firebase;

class RegistController extends Controller { public function submit(Request $request){ $auth = app('firebase.auth');
$userProperties = [ 'email' => $request->email, 'password' => $request->password, ];

    $createdUser = $auth->createUser($userProperties);
    $database = app('firebase.firestore')->database()->collection('Users')->document($createdUser->uid);

    $image = $request->file('image');
    $firebase_path = 'Profile_Images/';
    $localfolder = public_path('firebase-temp-uploads').'/';
    $name = $createdUser->uid;
    $extension = $image->getClientOriginalExtension();
    $file = $name;
    $image->move($localfolder,$file);
    $uploadedfile = fopen($localfolder.$file,'r');
    $object = app('firebase.storage')->getBucket()->upload($uploadedfile,['name'=>$firebase_path.$file]);
    $expiresAt = new \DateTime('36500 days');
    $imageReference = app('firebase.storage')->getBucket()->object("Profile_Images/".$file);
    $image = $imageReference->signedUrl($expiresAt);
    $database->set([
        'userBio' => $request->message,
        'userBioLink' => $request->number,
        'userEmail' => $request->email,
        'userProfileURL' => $image,
        'userUID' => $createdUser->uid,
        'username' => $request->name,

    ]);
    return redirect()->route('auth');
}

public function delete(Request $request){
    $all_posts = app('firebase.firestore')->database()->collection('Posts');
    $query = $all_posts->where('userUID', '=', \Session::get('uid'));
    $my_posts = $query->documents();
    foreach($my_posts as $post){
        $post_url = $post->data()['imageURL'];
        $post_url = preg_replace('https://firebasestorage.googleapis.com:443/v0/b/pushistiilubimchik.appspot.com/o/Post_Images%2F','',$post_url);
        app('firebase.storage')->getBucket()->object($post->data()['imageURL'])->delete();
        app('firebase.storage')->getBucket()->object($post->data()['imageURL1'])->delete();
        app('firebase.storage')->getBucket()->object($post->data()['imageURL2'])->delete();
        app('firebase.storage')->getBucket()->object($post->data()['imageURL3'])->delete();
        app('firebase.storage')->getBucket()->object($post->data()['userProfileURL'])->delete();
        $post->reference()->delete();
    }
    app('firebase.auth')->deleteUser(Session::get('uid')); 
    app('firebase.firestore')->database()->collection('Users')->document(Session::get('uid'))->delete(); 
    Session::forget('uid');
    return redirect()->route('home');
}

public function auth(Request $request){
    $auth = app('firebase.auth');
    $email = $request->input('email'); 
    $pass = $request->input('password');
    $signInResult = $auth->signInWithEmailAndPassword($email, $pass);
    try {
        $signInResult = $auth->signInWithEmailAndPassword($email, $pass);
        Session::put('uid', $signInResult->firebaseUserId());
        Session::save();
        return redirect()->route('profile');
    } catch (\Throwable $e) {
        switch ($e->getMessage()) {
            case 'INVALID_PASSWORD':
                echo "Неверный пароль";
                break;
            case 'EMAIL_NOT_FOUND':
                echo "Почта не найдена";
                break;
            default:
                dd($e->getMessage());
                break;
        }
    }

}

}`

jeromegamez commented 12 months ago

As you can read on https://firebase-php.readthedocs.io/en/stable/cloud-storage.html, this SDK provides just a bridge to the official google/cloud-storage library.

There, you can find links to Google's official library documentation and a repository with examples.

Here's the example on deleting storage objects: https://github.com/GoogleCloudPlatform/php-docs-samples/blob/main/storage/src/delete_object.php