Search code examples
laravelfirebaselaravel-authentication

how to put only session auth in laravel


Web.php

Route::group(['middleware'=>'auth:admin'], function(){
    Route::resource('dashboard', 'DashboardController');

    Route::group(['prefix'=>'users','namespace'=>'User','as'=>'u.'], function(){
        Route::resource('list',     'ListController');
        Route::resource('segments', 'SegmentController');
    });
    Route::group(['prefix'=>'sales','namespace'=>'Sales','as'=>'s.'], function(){
        Route::resource('credits',   'CreditController');
        Route::resource('packages',  'PackageController');
    });
});

RedirectIfAuthenticated

class RedirectIfAuthenticated
{
    public function handle($request, Closure $next, $guard)
    {
        if(Session::has('admin_session')){
            return redirect('admin/dashboard');
        }
    // if (Auth::guard($guard)->check()) {
    //     return redirect(RouteServiceProvider::HOME);
    // }

        return $next($request);
    }
}

AuthController

public function login(Request $request)
{
    $serviceAccount = ServiceAccount::fromJsonFile(__DIR__.'/firebaseKey.json');
    $firebase= (new Factory)->withServiceAccount($serviceAccount)->create();
    $this->database = $firebase->getDatabase();

    $auth = $firebase->getAuth();
    // if (Auth::guard('admin')->attempt(['email' => $request->email, 'password' => $request->password])) {
       //      return redirect('admin/dashboard');
    // }
    try {
        if($user = $auth->verifyPassword($request->email,$request->password)){
            Session::put('admin_session',$user);
            return redirect('admin/dashboard');
        }
    } catch (\Kreait\Firebase\Exception\Auth\InvalidPassword $e) {
        echo 'wrong password'; die();
    } catch (\Kreait\Firebase\Auth\SignIn\FailedToSignIn $e) {
        echo 'invalid email'; die();
    }
}

How to put only session authentication on above-mentioned routes? As I want to put firebase authentication so laravel's wouldn't work here,

So I just want to implement simple isset(session('admin_session')) functionality which will be common for all routes...

Anyone, please suggest me how to implement it... it keeps redirecting!


Solution

    1. Change the middleware group to a new middleware name:

    Web.php

    Route::group(['middleware'=>'role'], function(){      //or the name you want to use
        Route::resource('dashboard', 'DashboardController');
    
        Route::group(['prefix'=>'users','namespace'=>'User','as'=>'u.'], function(){
            Route::resource('list',     'ListController');
            Route::resource('segments', 'SegmentController');
        });
        Route::group(['prefix'=>'sales','namespace'=>'Sales','as'=>'s.'], function(){
            Route::resource('credits',   'CreditController');
            Route::resource('packages',  'PackageController');
        });
    });
    
    1. Create a new middleware by php artisan make:middleware Role :

    Role.php (Middleware)

    <?php
    
    namespace App\Http\Middleware;
    
    use Session;
    use Closure;
    
    class Role
    {
        public function handle($request, Closure $next)
        {
            if(Session::has('admin_session')) {
                return $next($request);
            }
            return redirect()->route('login');
        }
    }
    
    1. Modify the RedirectIfAuthenticated middleware to this:

    RedirectIfAuthenticated.php

    class RedirectIfAuthenticated
    {
        public function handle($request, Closure $next, $guard = null)
        {
            if (Session::has('admin_session')) {
                return redirect('admin/dashboard');
            }
            return $next($request);
        }
    }
    
    1. Modify AuthController to this:

    AuthController.php

    public function login(Request $request)
    {
        if ($auth = $this->firebase->getAuth()) {
            try {
                $user = $auth->verifyPassword($request->email, $request->password);
                Session::put('admin_session',$user);
                return redirect('admin/dashboard');
            }
            catch (\Kreait\Firebase\Exception\Auth\InvalidPassword $e) {
                return back();  // code for wrong password
            }
            catch (\Kreait\Firebase\Auth\SignIn\FailedToSignIn $e) {
                return back();  //code for user doesn't exists
            }
        }
        return back();  // something went wrong
    }