|
| 1 | +<?php |
| 2 | +namespace Chatbox\Larabase; |
| 3 | +use Illuminate\Auth\AuthenticationException; |
| 4 | +use Illuminate\Http\Request; |
| 5 | +use Illuminate\Support\ServiceProvider; |
| 6 | +use Kreait\Firebase; |
| 7 | +use Kreait\Firebase\Factory; |
| 8 | +use Kreait\Firebase\ServiceAccount; |
| 9 | + |
| 10 | +/** |
| 11 | + * Created by PhpStorm. |
| 12 | + * User: mkkn |
| 13 | + * Date: 2018/12/19 |
| 14 | + * Time: 0:09 |
| 15 | + */ |
| 16 | + |
| 17 | +class FirebaseServiceProvider extends ServiceProvider |
| 18 | +{ |
| 19 | + public function boot(){ |
| 20 | + config()->set("auth.guards.firebase_idtoken",[ |
| 21 | + 'driver' => 'firebase_idtoken', |
| 22 | + ]); |
| 23 | + } |
| 24 | + |
| 25 | + public function register() |
| 26 | + { |
| 27 | + app()->singleton(Firebase::class,function(){ |
| 28 | + $serviceAccount = ServiceAccount::fromArray(config("services.firebase",[])); |
| 29 | + $firebase = (new Factory()) |
| 30 | + ->withServiceAccount($serviceAccount) |
| 31 | + ->create(); |
| 32 | + return $firebase; |
| 33 | + }); |
| 34 | + |
| 35 | + app()->alias(Firebase::class,"firebase"); |
| 36 | + |
| 37 | + app('auth')->viaRequest('firebase_idtoken', function (Request $request) { |
| 38 | + /** @var Firebase $firebase */ |
| 39 | + $firebase = app(Firebase::class); |
| 40 | + if ($token = $request->bearerToken()) { |
| 41 | + try { |
| 42 | + $verifiedIdToken = $firebase->getAuth()->verifyIdToken($token); |
| 43 | + $uid = $verifiedIdToken->getClaim('sub'); |
| 44 | + return $firebase->getAuth()->getUser($uid); |
| 45 | + } catch (\Firebase\Auth\Token\Exception\InvalidToken $e) { |
| 46 | + throw new AuthenticationException(); |
| 47 | + } |
| 48 | + |
| 49 | + return $this->user->findByToken($token); |
| 50 | + } |
| 51 | + }); |
| 52 | + |
| 53 | + |
| 54 | + } |
| 55 | + |
| 56 | +} |
0 commit comments