Firebase Auth JS/PHP

后端 未结 3 1986
温柔的废话
温柔的废话 2020-12-30 16:21

I\'ve been tasked to build a web interface for an Android app based on firebase. I\'ve got a handful of endpoints, that interact with the database (Cloud functions). To acce

3条回答
  •  别那么骄傲
    2020-12-30 17:01

    I have to admit, the complexity of the firebase docs and examples and different services, got me so confused, that I thought, authentication for the web is only possible via JavaScript. That was wrong. At least for my case, where I just login with email and password to retrieve a Json Web Token (JWT), to sign all calls to the Firebase cloud functions. Instead of juggling with weird Ajax requests or set the token cookie via JavaScript, I just needed to call the Firebase Auth REST API

    Here is a minimal case using the Fatfreeframework:

    Login form

    Route

    $f3->route('POST /auth', 'App->auth');
    

    Controller

    class App
    {
        function auth()
        {
            $email = $this->f3->get('POST.email');
            $password = $this->f3->get('POST.password');
    
            $apiKey = 'API_KEY'; // see https://firebase.google.com/docs/web/setup
    
            $auth = new Auth($apiKey);
            $result = $auth->login($email,$password);
    
            if($result['success']){
                $this->f3->set('COOKIE.token',$result['idToken']);
                $this->f3->reroute('/dashboard');
            }else{
                $this->f3->clear('COOKIE.token');
                $this->f3->reroute('/');
            }
        }
    }
    

    Class

    apiKey = $apiKey;
        }
    
        public function login($email,$password)
        {
    
            $client = new Client();
            // Create a POST request using google api
            $key = $this->apiKey;
            $responsee = $client->request(
                'POST',
                'https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyPassword?key=' . $key,
                [
                    'headers' => [
                        'content-type' => 'application/json',
                        'Accept' => 'application/json'
                    ],
                    'body' => json_encode([
                        'email' => $email,
                        'password' => $password,
                        'returnSecureToken' => true
                    ]),
                    'exceptions' => false
                ]
            );
    
            $body = $responsee->getBody();
            $js = json_decode($body);
    
            if (isset($js->error)) {
                return [
                    'success' => false,
                    'message' => $js->error->message
                ];
            } else {
                return [
                    'success' => true,
                    'localId' => $js->localId,
                    'idToken' => $js->idToken,
                    'email' => $js->email,
                    'refreshToken' => $js->refreshToken,
                    'expiresIn' => $js->expiresIn,
                ];
    
            }
    
        }
    
    }
    

    Credits

提交回复
热议问题