如何在 laravel 中仅放置会话身份验证

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();
    }
}

如何在上述路由上只设置会话认证? 因为我想放置 firebase 身份验证所以 laravel 在这里不起作用,

所以我只想实现简单的 isset(session('admin_session')) 功能,这对所有路由都是通用的...

任何人,请建议我如何实现它...它一直在重定向!

  1. 将中间件组更改为新的中间件名称:

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. 通过 php artisan make:middleware Role 创建一个新的中间件:

Role.php(中间件)

<?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. 将RedirectIfAuthenticated中间件修改为:

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. 将 AuthController 修改为:

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
}