我正在使用标记为business_user
的自定义防护为其他类型的用户使用自定义防护。
我注意到我能够以普通用户(web)和我的business_users
身份登录。
我已经读过Pusher documentation,我曾经用它来创建自定义防护,以便在“ 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);
}
}
当我进入用户登录页面时,它仍然允许我尝试登录。有人可以告诉我如何解决此问题吗?
答案 0 :(得分:0)
在LoginController中,您可以覆盖authenticated
方法。
/**
* The user has been authenticated.
*
* @param \Illuminate\Http\Request $request
* @param mixed $user
* @return mixed
*/
protected function authenticated(Request $request, $user)
{
auth()->login($user); // this method will login with default guard
return redirect()->intended($this->redirectPath());
}
答案 1 :(得分:0)
我认为是因为中间件的顺序
<?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()
的{{1}}或登录视图(LoginController
文件)中进行检查
blade