laravel - 防止同时登录用户和自定义守卫
问题描述
我正在为不同类型的用户使用自定义保护,使用标记为 的自定义保护business_user
。
我注意到我能够以普通用户(网络)和我的business_users
. 我已经阅读了Pusher 文档,该文档首先用于创建自定义防护,以将其他中间件添加到我的“LoginController”中。
但实际上我什至没有 LoginController,我为每种用户类型创建了自己的控制器。AuthController(用于 Web)和 BusinessController(用于 business_user)。
我使用以下代码创建了第三个标有 LoginController 的控制器:
<?php
namespace App\Http\Controllers;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
class LoginController extends Controller
{
use AuthenticatesUsers;
protected $redirectTo = '/dashboard';
public function __construct()
{
$this->middleware('guest')->except('logout');
$this->middleware('guest:business_user')->except('logout');
}
}
我还更新了我RedirectIfAuthenticated
的如下:
class RedirectIfAuthenticated
{
public function handle($request, Closure $next, $guard = null)
{
if ($guard == "business_user" && Auth::guard($guard)->check()) {
return redirect('/dashboard');
}
if (Auth::guard($guard)->check()) {
return redirect(RouteServiceProvider::HOME);
}
return $next($request);
}
RedirectIfAuthenticated
我的中间件文件夹中也有一个中间件。
<?php
namespace App\Http\Middleware;
use App\Providers\RouteServiceProvider;
use Closure;
use Illuminate\Support\Facades\Auth;
class RedirectIfAuthenticated
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string|null $guard
* @return mixed
*/
public function handle($request, Closure $next, $guard = null)
{
if ($guard == "business_user" && Auth::guard($guard)->check()) {
return redirect('/dashboard');
}
if (Auth::guard($guard)->check()) {
return redirect(RouteServiceProvider::HOME);
}
return $next($request);
}
}
当我登陆我的用户登录页面时,它仍然允许我尝试登录。有人可以告诉我如何解决这个问题吗?
解决方案
我认为是因为中间件的顺序
<?php
public function __construct()
{
$this->middleware('guest')->except('logout'); // this procress first and redirect to login page
$this->middleware('guest:business_user')->except('logout');
}
所以,我认为您可以直接签入__construct()
或LoginController
登录视图(blade
文件)
@if (Auth::check('business_user'))
You are already logged in (or perform a redirect somewhere)
@else
//display login form
@endif