Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

luk's avatar
Level 1

my custom login page is not working

In my laravel project I created my own login page in such way controlller

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests\LoginRequest;
use Illuminate\Support\Facades\Auth;

class LoginController extends Controller
{
    /**
     * Display login page.
     * 
     * @return Renderable
     */
    public function index()

    {

        return view('auth.login');

    }  

    /**
     * Handle account login request
     * 
     * @param LoginRequest $request
     * 
     * @return \Illuminate\Http\Response
     */
    public function postLogin(Request $request)

    {
        dump( $request);
        $request->validate([

            'email' => 'required',

            'password' => 'required',

        ]);

   

        $credentials = $request->only('email', 'password');

        if (Auth::attempt($credentials)) {

            return redirect()->intended('home')

                        ->withSuccess('You have Successfully loggedin');

        }

  

        return redirect("login")->withSuccess('Oppes! You have entered invalid credentials');

    }

    /**
     * Handle response after user authenticated
     * 
     * @param Request $request
     * @param Auth $user
     * 
     * @return \Illuminate\Http\Response
     */
    protected function authenticated(Request $request, $user) 
    {
        return redirect()->home();
    }
}

route

Route::get('login', [App\Http\Controllers\LoginController::class,'index'])->name('login');
Route::post('post-login', [App\Http\Controllers\LoginController::class,'postLogin'])->name('login.post');

view

@extends('layouts.app')

@section('content')

<main class="login-form">

  <div class="cotainer">

      <div class="row justify-content-center">

          <div class="col-md-8">

              <div class="card">

                  <div class="card-header">Login</div>

                  <div class="card-body">

  

                      <form action="{{ route('login.post') }}" method="POST">

                          @csrf

                          <div class="form-group row">

                              <label for="email_address" class="col-md-4 col-form-label text-md-right">E-Mail Address</label>

                              <div class="col-md-6">

                                  <input type="text" id="email_address" class="form-control" name="email" required autofocus>

                                  @if ($errors->has('email'))

                                      <span class="text-danger">{{ $errors->first('email') }}</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 type="password" id="password" class="form-control" name="password" required>

                                  @if ($errors->has('password'))

                                      <span class="text-danger">{{ $errors->first('password') }}</span>

                                  @endif

                              </div>

                          </div>

  

                          <div class="form-group row">

                              <div class="col-md-6 offset-md-4">

                                  <div class="checkbox">

                                      <label>

                                          <input type="checkbox" name="remember"> Remember Me

                                      </label>

                                  </div>

                              </div>

                          </div>

  

                          <div class="col-md-6 offset-md-4">

                              <button type="submit" class="btn btn-primary">

                                  Login

                              </button>

                          </div>

                      </form>

                        

                  </div>

              </div>

          </div>

      </div>

  </div>

</main>

@endsection

but after i click the login button ,it refresh the page and still it is landing in login page i don't know why it is not working ? anyone who can help me please?

0 likes
30 replies
tisuchi's avatar

@habte is that refreshed the page or returned back to the previous page?

Do you get any error messages?

1 like
luk's avatar
Level 1

@tisuchi it just refresh the page and no error massage is there

luk's avatar
Level 1

@jlrdw I used as your sugestion and i faced the "The provided credentials do not match our records." this error and here is my registration code

<?php

namespace App\Http\Controllers;
    
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Models\User;
use Spatie\Permission\Models\Role;
use DB;
use Hash;
use Illuminate\Support\Arr;
    
class UserController extends Controller
{
   
    public function index(Request $request)
    {
        $data = User::orderBy('id','DESC')->paginate(5);
        return view('users.index',compact('data'));
    }
    

    public function create()
    {
        $roles = Role::pluck('name','name')->all();
        return view('users.create',compact('roles'));
    }
    

    public function store(Request $request)
    {
        $this->validate($request, [
            'name' => 'required',
            'email' => 'required|',
            'password' => 'required',
            'roles' => 'required'
        ]);
    
        $input = $request->all();
        $input['password'] = Hash::make($input['password']);
    
        $user = User::create($input);
        $user->assignRole($request->input('roles'));
    
        return redirect()->route('users.index')
                        ->with('success','User created successfully');
    }
    
    public function show($id)
    {
        $user = User::find($id);
        return view('users.show',compact('user'));
    }
    
    public function edit($id)
    {
        $user = User::find($id);
        $roles = Role::pluck('name','name')->all();
        $userRole = $user->roles->pluck('name','name')->all();
    
        return view('users.edit',compact('user','roles','userRole'));
    }

    public function update(Request $request, $id)
    {
        $this->validate($request, [
            'name' => 'required',
            'email' => 'required|email|unique:users,email,'.$id,
            'password' => 'required',
            'roles' => 'required'
        ]);
    
        $input = $request->all();
        if(!empty($input['password'])){ 
            $input['password'] = Hash::make($input['password']);
        }else{
            $input = Arr::except($input,array('password'));    
        }
    
        $user = User::find($id);
        $user->update($input);
        DB::table('model_has_roles')->where('model_id',$id)->delete();
    
        $user->assignRole($request->input('roles'));
    
        return redirect()->route('users.index')
                        ->with('success','User updated successfully');
    }
    
    public function destroy($id)
    {
        User::find($id)->delete();
        return redirect()->route('users.index')
                        ->with('success','User deleted successfully');
    }
}

and it registered successfully!! but the login is not

jlrdw's avatar

@habte try changing your redirect to a specific end point:

return redirect()->intended('account/index');   // just example

On login failure I have:

        $message = 'The provided credentials do not match our records.';
        
        return redirect('login')->with('status', $message);

I would suggest actually copy and paste the given code from the documentation, it works, then tweak slightly if needed. Backup first.

luk's avatar
Level 1

@jlrdw it just redirect to the login page again , here is my code

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests\LoginRequest;
use Illuminate\Support\Facades\Auth;

class LoginController extends Controller
{
    /**
     * Handle an authentication attempt.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        return view('auth.login');
    }
    public function authenticate(Request $request)
    {
        $credentials = $request->validate([
            'email' => ['required', 'email'],
            'password' => ['required'],
        ]);

        if (Auth::attempt($credentials)) {
            $request->session()->regenerate();

            return redirect()->intended('users');
        }

        $message = 'The provided credentials do not match our records.';
        
        return redirect('login')->with('status', $message);
    }
}
LaraBABA's avatar

If this is a new route, have you tried to clear the route cache with the below command(I would just run all of them if I were you)?

php artisan route:cache
php artisan view:clear
php artisan config:clear
php artisan cache:clear
php artisan config:cache

Also can you try to see the routelist to see if you do not have some kind of duplicate of login.post?

php artisan route:list

Or simply your details are not received as correct details and you are not seeing the error bag.

1 like
luk's avatar
Level 1

@LaraBABA I did that one and I got

                        |
|        | GET|HEAD  | login                  | login            | App\Http\Controllers\Auth\LoginController@showLoginForm                | web
                                 |
|        |           |                        |                  |                                                                        | App\Http\Middleware\RedirectIfAuthenticated
                                 |
|        | POST      | login                  | post             | App\Http\Controllers\LoginController@authenticate                      | web
luk's avatar
Level 1

@LaraBABA No I just show you only the login bute here is all

--------------------------------+
|        | GET|HEAD  | /                      |                  | Closure                                                                | web
                                 |
|        | GET|HEAD  | api/user               |                  | Closure                                                                | api
                                 |
|        |           |                        |                  |                                                                        | App\Http\Middleware\Authenticate:sanctum
                                 |
|        | GET|HEAD  | home                   | home             | App\Http\Controllers\HomeController@index                              | web
                                 |
|        |           |                        |                  |                                                                        | App\Http\Middleware\Authenticate
                                 |
|        | GET|HEAD  | login                  | login            | App\Http\Controllers\Auth\LoginController@showLoginForm                | web
                                 |
|        |           |                        |                  |                                                                        | App\Http\Middleware\RedirectIfAuthenticated
                                 |
|        | POST      | login                  | post             | App\Http\Controllers\LoginController@authenticate                      | web
                                 |
|        | POST      | logout                 | logout           | App\Http\Controllers\Auth\LoginController@logout                       | web
                                 |
|        | POST      | password/confirm       |                  | App\Http\Controllers\Auth\ConfirmPasswordController@confirm            | web
                                 |
|        |           |                        |                  |                                                                        | App\Http\Middleware\Authenticate
                                 |
|        | GET|HEAD  | password/confirm       | password.confirm | App\Http\Controllers\Auth\ConfirmPasswordController@showConfirmForm    | web
                                 |
|        |           |                        |                  |                                                                        | App\Http\Middleware\Authenticate
                                 |
|        | POST      | password/email         | password.email   | App\Http\Controllers\Auth\ForgotPasswordController@sendResetLinkEmail  | web
                                 |
|        | POST      | password/reset         | password.update  | App\Http\Controllers\Auth\ResetPasswordController@reset                | web
                                 |
|        | GET|HEAD  | password/reset         | password.request | App\Http\Controllers\Auth\ForgotPasswordController@showLinkRequestForm | web
                                 |
|        | GET|HEAD  | password/reset/{token} | password.reset   | App\Http\Controllers\Auth\ResetPasswordController@showResetForm        | web
                                 |
|        | POST      | register               |                  | App\Http\Controllers\Auth\RegisterController@register                  | web
                                 |
|        |           |                        |                  |                                                                        | App\Http\Middleware\RedirectIfAuthenticated
                                 |
|        | GET|HEAD  | register               | register         | App\Http\Controllers\Auth\RegisterController@showRegistrationForm      | web
                                 |
|        |           |                        |                  |                                                                        | App\Http\Middleware\RedirectIfAuthenticated
                                 |
|        | GET|HEAD  | roles                  | roles.index      | App\Http\Controllers\RoleController@index                              | web
                                 |
|        |           |                        |                  |                                                                        | App\Http\Middleware\Authenticate
                                 |
|        |           |                        |                  |                                                                        | App\Http\Middleware\PermissionMiddleware:role-list|r
ole-create|role-edit|role-delete |
|        | POST      | roles                  | roles.store      | App\Http\Controllers\RoleController@store                              | web
                                 |
|        |           |                        |                  |                                                                        | App\Http\Middleware\Authenticate
                                 |
|        |           |                        |                  |                                                                        | App\Http\Middleware\PermissionMiddleware:role-list|r
ole-create|role-edit|role-delete |
|        |           |                        |                  |                                                                        | App\Http\Middleware\PermissionMiddleware:role-create
                                 |
|        | GET|HEAD  | roles/create           | roles.create     | App\Http\Controllers\RoleController@create                             | web
                                 |
|        |           |                        |                  |                                                                        | App\Http\Middleware\Authenticate
                                 |
|        |           |                        |                  |                                                                        | App\Http\Middleware\PermissionMiddleware:role-create
                                 |
|        | DELETE    | roles/{role}           | roles.destroy    | App\Http\Controllers\RoleController@destroy                            | web
                                 |
|        |           |                        |                  |                                                                        | App\Http\Middleware\Authenticate
                                 |
|        |           |                        |                  |                                                                        | App\Http\Middleware\PermissionMiddleware:role-delete
                                 |
|        | GET|HEAD  | roles/{role}           | roles.show       | App\Http\Controllers\RoleController@show                               | web
                                 |
|        |           |                        |                  |                                                                        | App\Http\Middleware\Authenticate
                                 |
|        | PUT|PATCH | roles/{role}           | roles.update     | App\Http\Controllers\RoleController@update                             | web
                                 |
|        |           |                        |                  |                                                                        | App\Http\Middleware\Authenticate
                                 |
|        |           |                        |                  |                                                                        | App\Http\Middleware\PermissionMiddleware:role-edit
                                 |
|        | GET|HEAD  | roles/{role}/edit      | roles.edit       | App\Http\Controllers\RoleController@edit                               | web
                                 |
|        |           |                        |                  |                                                                        | App\Http\Middleware\Authenticate
                                 |
|        |           |                        |                  |                                                                        | App\Http\Middleware\PermissionMiddleware:role-edit
                                 |
|        | GET|HEAD  | sanctum/csrf-cookie    |                  | Laravel\Sanctum\Http\Controllers\CsrfCookieController@show             | web
                                 |
|        | GET|HEAD  | users                  | users.index      | App\Http\Controllers\UserController@index                              | web
                                 |
|        | GET|HEAD  | users/add              | users.create     | App\Http\Controllers\UserController@create                             | web
                                 |
|        |           |                        |                  |                                                                        | App\Http\Middleware\Authenticate
                                 |
|        | GET|HEAD  | users/delete/{id}      | users.destroy    | App\Http\Controllers\UserController@destroy                            | web
                                 |
|        |           |                        |                  |                                                                        | App\Http\Middleware\Authenticate
                                 |
|        | GET|HEAD  | users/detail/{id}      | users.details    | App\Http\Controllers\UserController@details                            | web
                                 |
|        |           |                        |                  |                                                                        | App\Http\Middleware\Authenticate
                                 |
|        | GET|HEAD  | users/edit/{id}        | users.edit       | App\Http\Controllers\UserController@edit                               | web
                                 |
|        |           |                        |                  |                                                                        | App\Http\Middleware\Authenticate
                                 |
|        | POST      | users/store            | users.store      | App\Http\Controllers\UserController@store                              | web
                                 |
|        |           |                        |                  |                                                                        | App\Http\Middleware\Authenticate
                                 |
|        | POST      | users/update/{id}      | users.update     | App\Http\Controllers\UserController@update                             | web
                                 |
|        |           |                        |                  |                                                                        | App\Http\Middleware\Authenticate
                                 |
+--------+-----------+------------------------+------------------+----------------
jlrdw's avatar

@habte try to copy and paste the code directly from the documentation to your login controller, and replace dashboard with wherever you are wanting to redirect to.

It's hard to see exactly why it's not working when I don't have your whole project. Also read over the documentation again in case you missed something.

But I can assure you that the code in the documentation works when all the other items are set up correctly, like the login page for example.

Make sure your sessions are working and being stored.

1 like
luk's avatar
Level 1

@jlrdw I just copy and pest like this controller

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests\LoginRequest;
use Illuminate\Support\Facades\Auth;

class LoginController extends Controller
{
    /**
     * Display login page.
     * 
     * @return Renderable
     */
    public function show()
    {
        return view('auth.login');
    }

    /**
     * Handle account login request
     * 
     * @param LoginRequest $request
     * 
     * @return \Illuminate\Http\Response
     */
    /**
     * Handle an authentication attempt.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function authenticate(Request $request)
    {
        $credentials = $request->validate([
            'email' => ['required', 'email'],
            'password' => ['required'],
        ]);

        if (Auth::attempt($credentials)) {
            $request->session()->regenerate();

            return redirect()->intended('home');
        }

        return back()->withErrors([
            'email' => 'The provided credentials do not match our records.',
        ])->onlyInput('email');
    }
}

route

Auth::routes();

Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home');
Route::group(['middleware' => ['auth']], function() {
    Route::resource('roles', RoleController::class);
    
    
});
Route::get('login', [App\Http\Controllers\LoginController::class,'index'])->name('login');
Route::post('post-login', [App\Http\Controllers\LoginController::class,'login'])->name('post');

view

@extends('layouts.app')

@section('content')

<main class="login-form">

  <div class="cotainer">

      <div class="row justify-content-center">

          <div class="col-md-8">

              <div class="card">

                  <div class="card-header">Login</div>

                  <div class="card-body">

  

                      <form action="{{ route('post') }}" method="POST">

                          @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 type="text" id="email" class="form-control" name="email" required autofocus>

                                  @if ($errors->has('email'))

                                      <span class="text-danger">{{ $errors->first('email') }}</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 type="password" id="password" class="form-control" name="password" required>

                                  @if ($errors->has('password'))

                                      <span class="text-danger">{{ $errors->first('password') }}</span>

                                  @endif

                              </div>

                          </div>

  

                          <div class="form-group row">

                              <div class="col-md-6 offset-md-4">

                                  <div class="checkbox">

                                      <label>

                                          <input type="checkbox" name="remember"> Remember Me

                                      </label>

                                  </div>

                              </div>

                          </div>

  

                          <div class="col-md-6 offset-md-4">

                              <button type="submit" class="btn btn-primary">

                                  Login

                              </button>

                          </div>

                      </form>

                        

                  </div>

              </div>

          </div>

      </div>

  </div>

</main>

@endsection

but the error is still the same "The provided credentials do not match our records." ??

jlrdw's avatar

@habte are you sure that user is in database, and is the password bcrypted? And as @thinkverse mentioned have the form name and id the same, try that.

Edit:

Check that you are getting to the controller:

    public function authenticate(Request $request)
    {
        $credentials = $request->validate([
            'email' => ['required', 'email'],
            'password' => ['required'],
        ]);

        // add
       dd('I am here');

If you don't get that check your routes.

1 like
luk's avatar
Level 1

@jlrdw yeah shure here is my user controller

<?php

namespace App\Http\Controllers;
    
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Models\User;
use Spatie\Permission\Models\Role;
use DB;
use Hash;
use Illuminate\Support\Arr;
    
class UserController extends Controller
{
   
    public function index(Request $request)
    {
        $data = User::orderBy('id','DESC')->paginate(5);
        return view('users.index',compact('data'));
    }
    

    public function create()
    {
        $roles = Role::pluck('name','name')->all();
        return view('users.create',compact('roles'));
    }
    

    public function store(Request $request)
    {
        $this->validate($request, [
            'name' => 'required',
            'email' => 'required|',
            'password' => 'required',
            'roles' => 'required'
        ]);
    
        $input = $request->all();
        $input['password'] = Hash::make($input['password']);
    
        $user = User::create($input);
        $user->assignRole($request->input('roles'));
    
        return redirect()->route('users.index')
                        ->with('success','User created successfully');
    }
    
    public function show($id)
    {
        $user = User::find($id);
        return view('users.show',compact('user'));
    }
    
    public function edit($id)
    {
        $user = User::find($id);
        $roles = Role::pluck('name','name')->all();
        $userRole = $user->roles->pluck('name','name')->all();
    
        return view('users.edit',compact('user','roles','userRole'));
    }

    public function update(Request $request, $id)
    {
        $this->validate($request, [
            'name' => 'required',
            'email' => 'required|email|unique:users,email,'.$id,
            'password' => 'required',
            'roles' => 'required'
        ]);
    
        $input = $request->all();
        if(!empty($input['password'])){ 
            $input['password'] = Hash::make($input['password']);
        }else{
            $input = Arr::except($input,array('password'));    
        }
    
        $user = User::find($id);
        $user->update($input);
        DB::table('model_has_roles')->where('model_id',$id)->delete();
    
        $user->assignRole($request->input('roles'));
    
        return redirect()->route('users.index')
                        ->with('success','User updated successfully');
    }
    
    public function destroy($id)
    {
        User::find($id)->delete();
        return redirect()->route('users.index')
                        ->with('success','User deleted successfully');
    }
}

route

Route::prefix('users')->group(function(){
    Route::get('',[App\Http\Controllers\UserController::class, 'index'])->name('users.index');
    Route::get('/add',[App\Http\Controllers\UserController::class, 'create'])->name('users.create')->middleware('auth');
    Route::post('/store',[App\Http\Controllers\UserController::class, 'store'])->name('users.store')->middleware('auth');
    Route::get('/delete/{id}', [App\Http\Controllers\UserController::class, 'destroy'])->name('users.destroy')->middleware('auth');
    Route::get('/edit/{id}', [App\Http\Controllers\UserController::class, 'edit'])->name('users.edit')->middleware('auth');
    Route::post('/update/{id}', [App\Http\Controllers\UserController::class, 'update'])->name('users.update')->middleware('auth');
    Route::get('/detail/{id}',[App\Http\Controllers\UserController::class, 'details'])->name('users.details')->middleware('auth');

});

and it registerd the user and the password is bcrypted in the database

jlrdw's avatar

@habte you need a

Route::post('login', 'Auth\LoginController@authenticate');
1 like
luk's avatar
Level 1

@jlrdw yeah i am getting the controller and i got " i am here " in dd

luk's avatar
Level 1

@jlrdw why ? the authenticate method is stored in the Logincontroller of mine ! and I just do that one but the error is still the same

jlrdw's avatar

@habte does it work if you do:

        /*$credentials = $request->validate([
            'email' => ['required', 'email'],
            'password' => ['required'],
        ]);*  // commented out

    $credentials = $request->only('email', 'password');
    // rest is the same

Also clear all of your various cache.

php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear
1 like
luk's avatar
Level 1

@jlrdw no just the error message "The provided credentials do not match our records."

jlrdw's avatar

@habte make double sure the user with the email and password is in the users table in the database. That should be working.

Have you modified any middleware, that can cause problems.

1 like
luk's avatar
Level 1

@jlrdw I am double shure there is in the database but the error is the same . I dont know why it is not working

jlrdw's avatar

@habte see my edit about middleware. If you changed middleware put it back to:

<?php

namespace App\Http\Middleware;

use Illuminate\Auth\Middleware\Authenticate as Middleware;

class Authenticate extends Middleware
{
    /**
     * Get the path the user should be redirected to when they are not authenticated.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return string|null
     */
    protected function redirectTo($request)
    {
        if (! $request->expectsJson()) {
            return route('login');
        }
    }
}
luk's avatar
Level 1

@jlrdw it is the same and i dont touch it , but i dont understand about this

Route::post('login', 'Auth\LoginController@authenticate');
jlrdw's avatar

@habte that is just the way I routed to login. But you are getting to the controller, you did the dd.

1 like
luk's avatar
Level 1

@jlrdw so what can be the error , its been 2 days with this error

jlrdw's avatar

@habte can you put project on github. Not vendor folder.

And try making a route that goes to LoginController@authenticate

1 like
luk's avatar
Level 1

@jlrdw shure but i also used spatie package and in the middleware i have permission is that may the issue with my login??

jlrdw's avatar
jlrdw
Best Answer
Level 75

@habte comment out the majority of the routes, but leave login routes and at least one place to redirect to after login.

Now try to login and see if that works.

Without having your app on my computer to test, it's extremely hard to see why the login isn't working.

Sometimes if one little thing is modified the wrong way things break.

Also, you could test a new app with the login code and only login routes and one end point to redirect to after login. Get all working and slowly move existing code over a little at a time, (test login each move), then you can tell what broke login.

But I have been using laravel since version 4 and somehow never had this type of login problem.

1 like
thinkverse's avatar

You're using the wrong identifier for your email input, in the controller you're looking for email, but the id used on the input element is email_address. The array key on validate should match the id on your input.

The same issue with $errors->has('email'), you're using email as the identifier but the id is email_address. The input, validate, and errors key should all match.

1 like

Please or to participate in this conversation.