在您的 auth.php 文件中,在 providers 数组中为定义的守卫添加提供者。
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
//'provider' => 'employees'
],
'api' => [
'driver' => 'token',
'provider' => 'users',
//'provider' => 'employees'
],
'employees' => [
'driver' => 'session',
'provider' => 'employees',
],
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],
'employees' => [
'driver' => 'eloquent',
'model' => App\Employees::class,
],
],
如果您使用 2 种不同的模型进行身份验证,请执行上述操作。如果您使用相同的模型基于用户角色进行身份验证,请为员工和用户提供相同的模型。
为员工登录创建路由。
Route::get('/employee/login','Auth\EmployeeLoginController@showLoginForm')->name('employee.login');
Route::post('/employee/login','Auth\EmployeeLoginController@login')->name('employee.login.submit');
创建员工登录控制器
<?php
namespace App\Http\Controllers\Auth;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Auth;
class EmployeeLoginController extends Controller
{
public function __construct()
{
$this->middleware('guest:employee');
}
public function showLoginForm()
{
return view('auth.employee-login');
}
public function login(Request $request)
{
// Validate the form data
$this->validate($request, [
'email' => 'required|email',
'password' => 'required|min:6'
]);
// Attempt to log the user in
if (Auth::guard('employee')->attempt(['email' => $request->email, 'password' => $request->password], $request->remember)) {
// if successful, then redirect to their intended location
return redirect()->intended(route('employee.Product.list'));
}
// if unsuccessful, then redirect back to the login with the form data
return redirect()->back()->withInput($request->only('email'));
}
}
如果您使用 2 种不同的型号,请执行上述操作。如果您使用相同的模型基于角色进行身份验证,只需在尝试方法中添加以下按角色检查
attempt(['email' => $request->email, 'password' => $request->password, 'role' => 'employee'], $request->remember))
然后在您的 app\Exception 文件夹中添加修改 handler.php 文件中未经身份验证的方法
未认证的受保护函数($request, AuthenticationException $exception)
{
if ($request->expectsJson()) {
return response()->json(['error' => 'Unauthenticated.'], 401);
}
$guard = array_get($exception->guards(),0);
switch ($guard) {
case 'admin':
$login = 'admin.login';
break;
case 'employee':
$login = 'employee.login';
break;
default:
$login = 'login';
break;
}
return redirect()->guest(route($login));
}
如果用户未通过身份验证,实际上你是 $login 变量被用来重定向到你想要的 url。
最后在您的 app\middleware\RedirectIfAuthenticated.php 文件中删除句柄方法并添加以下内容。
public function handle($request, Closure $next, $guard = null)
{
switch ($guard) {
case 'admin':
if (Auth::guard($guard)->check()) {
return redirect()->route('admin.index');
}
break;
case 'employee':
if (Auth::guard($guard)->check()) {
return redirect()->route('employee.dashboard');
}
break;
default:
if (Auth::guard($guard)->check()) {
return redirect('/');
}
break;
}
return $next($request);
}
如果用户已通过身份验证,您将在此处重定向用户。
为了更好地理解,请查看此视频。这适用于 5.3 和 5.4 它将帮助您了解所有这些工作原理。
Youtube link