如果会话存在,如何覆盖 laravel 自动重定向

How to override laravel auto redirection if session exists

你好我是 laravel 的新人,我正在 laravel 5.7 我有 2 个不同的身份验证 tables 一个是用户,另一个是公司首先是我如何检查table 是用户登录的第二个当我关闭并打开浏览器时 laravel 如果会话存在则自动重定向到主页但我还想添加检查它们以在特定页面上重定向用户意味着如果用户登录从用户 table 重定向到 abc 视图,如果公司从公司 table 登录,则重定向到 xyz 视图我如何覆盖?

这是我为多个授权表所做的:

  1. 转到配置 > auth.php

添加守卫

'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'api' => [
            'driver' => 'token',
            'provider' => 'users',
            'hash' => false,
        ],

        'admin' => [
            'driver' => 'session',
            'provider' => 'admins',
            'hash' => false,
        ],

        'company' => [
            'driver' => 'session',
            'provider' => 'companies',
            'hash' => false,
        ],
    ],

添加提供商

'providers' => [
    'admins' => [
        'driver' => 'eloquent',
        'model' => App\User::class,
    ],

     'companies' => [
         'driver' => 'eloquent',
         'model' => App\Companies::class,
     ],
],

添加密码

   'passwords' => [
        'admins' => [
            'provider' => 'admins',
            'email' => 'auth.emails.password',
            'table' => 'password_resets',
            'expire' => 60,
        ],
        'companies' => [
            'provider' => 'companies',
            'email' => 'auth.emails.password',
            'table' => 'password_resets',
            'expire' => 60,
        ],
    ],
  1. 转到App\Http\Middleware\RedirectIfAuthenticated

更新 handel 方法

public function handle($request, Closure $next, $guard = null)
    {
        if ($guard === 'admin' && Auth::guard($guard)->check()) {
            return redirect('/admin');
        }
        if ($guard === 'company' && Auth::guard($guard)->check()) {
            return redirect('/company');
        }
        return $next($request);
    }

现在我假设你有不同的用户和公司控制器,在这种情况下你可以在你的控制器中添加中间件

public function __construct()
    {
        // For Admin Users
        $this->middleware('auth:admin');

        // For Companies Users
        //$this->middleware('auth:company');
    }

或者你也可以在路由中添加中间件

示例

Route::group([
    'namespace'    => 'Companies',
    'middleware'   => 'auth:company'
], function () {
    // Authentication Routes...
    Route::get('login', 'Auth\LoginController@showLoginForm')->name('login');
});

希望对您有所帮助。