jeudi 26 septembre 2019

Larevel custom guards with loging not working

i have two custom guards "customer" and "adminuser" with separate controller files. default loginController for customers and AdminController for admin users. For admin user i have CheckRole middleware and guest middleware for customer. when i login as a admin user it will always login as same admin user. different admin login details are not working. when i click logout, it will logout and next time i login it shows this error "Trying to get property 'id' of non-object". I'm using Laravel 5.8 , i stucked in this case for a week. why this login not work? where is the problem. i am new to laravel. please help me. Thanks in advance.

Here is my admin login form

  @if ($errors->any())
  @foreach ($errors->all() as $error)
  <div class="alert alert-danger" role="alert">
      <strong>Oops!</strong> 
      <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 for customer login

<?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 for admin user login

<?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 Middleware

<?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 Model

    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;
       }
    }

Please help me! Thanks in Advance.



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire