Larevel таможня с логингом не работает - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть две пользовательских охраны "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">&times;</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;
       }
    }

Пожалуйста, помогите мне!Заранее спасибо.

...