У меня есть две пользовательских охраны "customer" и "adminuser" с отдельными файлами контроллера.defaultController по умолчанию для клиентов и AdminController для пользователей с правами администратора.Для администратора я имею промежуточное программное обеспечение CheckRole и промежуточное программное обеспечение гостя для клиента.когда я захожу как пользователь с правами администратора, он всегда будет входить как тот же пользователь с правами администратора.разные данные для входа администратора не работают.Когда я нажимаю кнопку «Выйти», он выходит из системы, и в следующий раз, когда я вхожу в систему, появляется эта ошибка «Попытка получить свойство 'id' не-объекта".Я использую Laravel 5.8, я застрял в этом случае на неделю.почему этот логин не работает?в чем проблема.Я новичок в Laravel.Помогите мне, пожалуйста.Заранее спасибо.
Вот моя форма для входа администратора
@if ($errors->any())
@foreach ($errors->all() as $error)
<div class="alert alert-danger" role="alert">
<strong>Oops!</strong> {{$error}}
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
@endforeach
@endif
<form action="/adminUserLogin" method="POST">
@csrf
<div class="input-group mb-3">
<input type="text" class="form-control" placeholder="Username" name="username" id="username">
<div class="input-group-append">
<span class="fa fa-user input-group-text"></span>
</div>
</div>
<div class="input-group mb-3">
<input type="password" class="form-control" placeholder="Password" name="password" id="password">
<div class="input-group-append">
<span class="fa fa-lock input-group-text"></span>
</div>
</div>
<div class="row">
<div class="col-8">
<div class="checkbox icheck">
<label>
<input type="checkbox"> Remember Me
</label>
</div>
</div>
<!-- /.col -->
<div class="col-4">
<button type="submit" class="btn btn-primary btn-block">Sign In</button>
</div>
<!-- /.col -->
</div>
</form>
LoginController.php для входа в систему клиента
<?php
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
use Auth;
class LoginController extends Controller
{
use AuthenticatesUsers;
/**
* Where to redirect users after login.
*
* @var string
*/
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest:customer')->except('customerlogout');
}
//login for the customer
public function customerLogin(Request $request)
{
$this->validate($request, [
'username' => 'required|min:3',
'password' => 'required|min:6|max:6'
]);
$status = Auth::guard('customer')->attempt([
'email' => $request->username,
'password' => $request->password],
$request->get('remember'));
if ($status) {
return redirect()->intended('/customerhome');
}
return redirect()->intended('/customerhome');
}
public function customerlogout(Request $request)
{
Auth::guard('customer')->logout();
return redirect('/index');
}
}
AdminController.php для входа в систему администратора
<?php
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
use Auth;
class AdminController extends Controller
{
use AuthenticatesUsers;
public function __construct()
{
$this->middleware('roles:adminuser')->except('adminlogout');
}
public function AdminLogin(Request $request)
{
$this->validate($request, [
'username' => 'required|min:3',
'password' => 'required|min:6|max:6'
]);
$status = Auth::guard('adminuser')->attempt([
'email' => $request->username,
'password' => $request->password,
]);
if ($status) {
return redirect()->intended('/adminhome');
}
return redirect()->back();
}
public function adminlogout(Request $request)
{
Auth::guard('adminuser')->logout();
$request->session()->flush();
return redirect('/admin/login');
}
}
Промежуточное программное обеспечение CheckRole
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Auth;
use App\Models\AdminUser;
class CheckRole
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next, $guard = null)
{
if ($guard === "adminuser" && Auth::guard($guard)->check()) {
return redirect('/adminhome');
}
if (Auth::guard($guard)->check()) {
return redirect('/admin/login');
}
return $next($request);
}
}
Модель AdminUser
public function hasRole()
{
if(Auth::guard('adminuser')->check()){
$admin_user_id = Auth::guard('adminuser')->user()->id;
$role_id = $this->roles()->select('role_name')->where('roles.id', $admin_user_id)->first();
return $role_id;
}
}
Пожалуйста, помогите мне!Заранее спасибо.