email address is invalid error session on login authentication firebase laravel

50 Views Asked by At

I want my laravel project have authentication firebase so I follow this tutorial: https://medium.com/@GaonLabs/laravel-firebase-authentication-complete-guide-7735a1f83a3d and at first, I got unresolved depedency error but fixed after I edit code as answer on Laravel Firebase authentication error, unresolved dependancy suggested.

I can register users into firebase authentication via in-build register page laravel, though I can't say the same about login session using laravel login page despite there's data about that users in firebase authentication. Firebase Authentication Page Settings-tab users

Though I can't pin point what was the error of my project. is it the env or something can't connect to local database or need some rework on login codes?

a lil bit differenciate between tutorial and my project

Models/Users.php

protected $fillable = [
        'uid',
        'role',
        'name',
        'email',
        'username',
        'password',
        'address',
        'phone',
    ];
    public function getAuthIdentifierName() {
        return 'uid';
     }
     public function getAuthIdentifier(){
        return $this->uid;
     }

Firebase/FirebaseUserProvider.php

public function retrieveById($identifier) {
      $firebaseUser = $this->auth->getUser($identifier);
      $user = new User([
         'uid' => $firebaseUser->uid,
         'email' => $firebaseUser->email,
         'name' => $firebaseUser->displayName
      ]);
      return $user;
   }

RegisterController.php

use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Http\Response;
use App\Models\User;
use Illuminate\Support\Facades\Auth;
use Illuminate\Foundation\Auth\RegistersUsers;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Illuminate\Http\Request;
use Kreait\Firebase\Contract\Auth as FirebaseAuth;
use Kreait\Firebase\Exception\FirebaseException;
use Illuminate\Validation\ValidationException;
use Session;
class RegisterController extends Controller {
   use RegistersUsers;
   protected $auth;
   protected $redirectTo = RouteServiceProvider::HOME;
   public function __construct(FirebaseAuth $auth) {
      $this->middleware('guest');
      $this->auth = $auth;
   }
   protected function validator(array $data) {
      return Validator::make($data, [
         'name' => ['required', 'string', 'max:255'],
         'email' => ['required', 'string', 'email', 'max:255'],
         'password' => ['required', 'string', 'min:8', 'confirmed'],
      ]);
   }
   protected function register(Request $request) {
      $this->validator($request->all())->validate();
      $userProperties = [
            'email' => $request->input('email'),
            'emailVerified' => false,
            'password' => $request->input('password'),
            'displayName' => $request->input('name'),
            'role' => $request->input('role'),
            'address' => $request->input('address'),
            //'phone' => $request->input('phone'),
            'disabled' => false,
        ];
      $createdUser = $this->auth->createUser($userProperties);
      return redirect()->route('login');
   }
protected function create(array $data)
    {
        return User::create([
            'name' => $data['name'],
            'role' => $data['role'],
            'username' => $data['username'],
            'email' => $data['email'],
            'password' => Hash::make($data['password']),
            'address' => $data['address'],
            'phone' => $data['phone'],
        ]);
    }
}

LoginController.php

use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
use Kreait\Firebase\Contract\Auth as FirebaseAuth;
use Kreait\Firebase\Auth\SignInResult\SignInResult;
use Kreait\Firebase\Exception\FirebaseException;
use Illuminate\Validation\ValidationException;
use Session;
use Auth;
use App\Models\User;
class LoginController extends Controller {
   use AuthenticatesUsers;
   protected $auth;
   protected $redirectTo = RouteServiceProvider::HOME;
   public function __construct(FirebaseAuth $auth) {
      $this->middleware('guest')->except('logout');
      $this->auth = $auth;
   }
protected function login(Request $request) {
      $auth = app("firebase.auth");
         $signInResult = $auth->signInWithEmailAndPassword(
             $request["email"],
             $request["password"]
         );
         $user = new User($signInResult->data());

         //uid Session
         $loginuid = $signInResult->firebaseUserId();
         Session::put('uid',$loginuid);

         $result = Auth::login($user);
         return redirect($this->redirectPath());
      /*try {
         $auth = app("firebase.auth");
         $signInResult = $auth->signInWithEmailAndPassword(
             $request["email"],
             $request["password"]
         );
         $user = new User($signInResult->data());

         //uid Session
         $loginuid = $signInResult->firebaseUserId();
         Session::put('uid',$loginuid);

         $result = Auth::login($user);
         return redirect($this->redirectPath());

     } catch (FirebaseException $e) {
         throw ValidationException::withMessages([
             $this->username() => [trans("auth.failed")],
         ]);
     }*/
   }
   public function username() {
      return 'email';
   }
public function handleCallback(Request $request, $provider) {
      $socialTokenId = $request->input('social-login-tokenId', '');
      try {
         $verifiedIdToken = $this->auth->verifyIdToken($socialTokenId);
         $user = new User();
         $user->displayName = $verifiedIdToken->getClaim('name');
         $user->email = $verifiedIdToken->getClaim('email');
         $user->localId = $verifiedIdToken->getClaim('user_id');
         Auth::login($user);
         return redirect($this->redirectPath());
      } catch (\InvalidArgumentException $e) {
         return redirect()->route('login');
      } catch (InvalidToken $e) {
         return redirect()->route('login');
      }
   }
}

Login page and it's input

Using try code resulting in credentials not match

Removing try code resulting he email address is invalid

0

There are 0 best solutions below