Skip to content
Advertisement

Laravel Custom Admin Login is not working

I have been developing a Laravel Auth system where there is a admin panel I had to create a custom admin authentication system. After after going through all the steps the login system is not working. After submitting the login form it redirect me to the same login page again instead of redirecting to the dashboard page. I am giving details of my whole system.

Let me know if anyone could help.

Admin Model

    namespace AppModels;

use IlluminateDatabaseEloquentFactoriesHasFactory;
use IlluminateNotificationsNotifiable;
use IlluminateFoundationAuthUser as Authenticatable;


class Admin extends Authenticatable
{
    use HasFactory;
    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];
}

Admin DB Migrations

<?php

use IlluminateDatabaseMigrationsMigration;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateSupportFacadesSchema;

class CreateAdminsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('admins', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('admins');
    }
}

ConfigAuth.php

<?php

return [

   

    'defaults' => [
        'guard' => 'web',
        'passwords' => 'users',
    ],
    
    
    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
       

        'api' => [
            'driver' => 'token',
            'provider' => 'users',
            'hash' => false,
        ],
        'admin' => [
            'driver' => 'session',
            'provider' => 'admins',
        ],
       
    ],

    

    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => AppModelsUser::class,
        ],
        'admins' => [
            'driver' => 'eloquent',
            'model' => AppModelsAdmin::class,
        ],
        

        // 'users' => [
        //     'driver' => 'database',
        //     'table' => 'users',
        // ],
    ],

    

    'passwords' => [
        'users' => [
            'provider' => 'users',
            'table' => 'password_resets',
            'expire' => 60,
            'throttle' => 60,
        ],
        'admins' => [
            'provider' => 'admins',
            'table' => 'password_resets',
            'expire' => 60,
            'throttle' => 60,
        ],
       
    ],

   

    'password_timeout' => 10800,

];

Login.Blade.php

@extends('layouts.app')
@section('pagetitle', 'Admin-Login')
@section('content')
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-8">
            <div class="card raleway">
                <div class="card-header text-center font-weight-bold"><i class="fas fa-lock"></i> &nbsp;{{ __('Admin Login') }}</div>

                <div class="card-body" style="padding-top:10%;padding-bottom:10%;">
                    <form method="POST" action="{{ route($loginRoute) }}">
                        @csrf

                        <div class="form-group row">
                            <label for="email" class="col-md-4 col-form-label text-md-right">{{ __('E-Mail Address') }}</label>
                            <div class="col-md-6">
                                <input id="email" type="email" class="form-control{{ $errors->has('email') ? ' is-invalid' : '' }}" name="email" value="{{ old('email') }}" required autofocus>

                                @if ($errors->has('email'))
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $errors->first('email') }}</strong>
                                    </span>
                                @endif
                            </div>
                        </div>
                        <div class="form-group row">
                            <label for="password" class="col-md-4 col-form-label text-md-right">{{ __('Password') }}</label>
                            <div class="col-md-6">
                                <input id="password" type="password" class="form-control{{ $errors->has('password') ? ' is-invalid' : '' }}" name="password" required>

                                @if ($errors->has('password'))
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $errors->first('password') }}</strong>
                                    </span>
                                @endif
                            </div>
                        </div>
                        <div class="form-group row">
                            <div class="col-md-6 offset-md-4">
                                <div class="form-check">
                                    <input class="form-check-input" type="checkbox" name="remember" id="remember" {{ old('remember') ? 'checked' : '' }}>

                                    <label class="form-check-label" for="remember">
                                        {{ __('Remember Me') }}
                                    </label>
                                </div>
                            </div>
                        </div>
                        <div class="form-group row mb-0">
                            <div class="col-md-8 offset-md-4">
                                <button type="submit" class="btn btn-primary">
                                    {{ __('Login') }}
                                </button>
                                @if (Route::has('password.request'))
                                    <a class="btn btn-link" href="{{ route($forgotPasswordRoute) }}">
                                        {{ __('Forgot Your Password?') }}
                                    </a>
                                @endif
                            </div>
                        </div>
                        
                       
                    </form>
                   
                </div>
            </div>
        </div>
    </div>
</div>
@endsection

LoginController.php

<?php

namespace AppHttpControllersAdminAuth;

use Auth;
use AppHttpControllersController;
use IlluminateHttpRequest;
use IlluminateFoundationAuthThrottlesLogins;


class LoginController extends Controller
{
   /**
     * Show the login form.
     * 
     * @return IlluminateHttpResponse
     */
    public function showLoginForm()
    {
        return view('admin.login',[
           
            'loginRoute' => 'admin.login',
            'forgotPasswordRoute' => 'admin.password.request',
        ]);
    }
     
    /**
     * Login the admin.
     * 
     * @param IlluminateHttpRequest $request
     * @return IlluminateHttpRedirectResponse
     */
    public function login(Request $request)
    {
        $this->validator($request);
    
        if(Auth::guard('admin')->attempt($request->only('email','password'),$request->filled('remember'))){
            //Authentication passed...
            return redirect()
                ->intended(route('admin.dashboard'))
                ->with('status','You are Logged in as Admin!');
        }
    
        //Authentication failed...
        return $this->loginFailed();
    }

    /**
     * Logout the admin.
     * 
     * @return IlluminateHttpRedirectResponse
     */
    public function logout()
    {
        Auth::guard('admin')->logout();
        return redirect()
            ->route('login')
            ->with('status','Admin has been logged out!');
    }

    /**
     * Validate the form data.
     * 
     * @param IlluminateHttpRequest $request
     * @return 
     */
    private function validator(Request $request)
    {
     //validation rules.
    $rules = [
        'email'    => 'required|email|exists:admins|min:5|max:191',
        'password' => 'required|string|min:4|max:255',
    ];

    //custom validation error messages.
    $messages = [
        'email.exists' => 'These credentials do not match our records.',
    ];

    //validate the request.
    $request->validate($rules,$messages);
    }

    /**
     * Redirect back after a failed login.
     * 
     * @return IlluminateHttpRedirectResponse
     */
    private function loginFailed()
    {
        return redirect()
        ->back()
        ->withInput()
        ->with('error','Login failed, please try again!');
    }
}

Web.php

Route::prefix('/admin')->name('admin.')->namespace('Admin')->group(function(){
      
        Route::get('/dashboard', [AppHttpControllersAdminDashboardController::class, 'index'])->name('dashboard');

    Route::namespace('Auth')->group(function(){
        
        //Login Routes
        Route::get('/login',[AppHttpControllersAdminAuthLoginController::class,'showLoginForm'])->name('login');
        Route::post('/login',[AppHttpControllersAdminAuthLoginController::class,'login']);
        Route::post('/logout',[AppHttpControllersAdminAuthLoginController::class,'logout'])->name('logout');

    
       
    
    });
  });

Advertisement

Answer

Solution

So I have solved my problem today. The problem was occurring because of the below function in my AdminDashboardController.php

/**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth');
    } 

After removing it. Everything working fine now.

User contributions licensed under: CC BY-SA
9 People found this is helpful
Advertisement