Search code examples
laravellaravel-bladelaravel-routinglaravel-controller

Laravel: Login doesn't redirect to home


I am having issues logging in using Laravel. Every time a user logs in, it redirects them to the post route (a blank page) instead of home, which is the intended route. Even when I login with the wrong credentials, it just goes to the post route. It doesn't even display the error message. The redirection for logout works fine, it's just login that I am having issues with.

Here is my LoginController:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Http\RedirectResponse;
use Illuminate\Support\Facades\Auth;
use Redirect;
use Session;

class LoginController extends Controller
{

    public function index()
    {
      return view('login');         
    }
   
    public function login(Request $request)
    {
        $username = $request->input('username');
        $password = $request->input('password');

        if(Auth::attempt(['username' => $username, 'password' => $password, 'active' => 1])) {
           $request->session()->regenerate();
           session(['username' => 'username']);
           return redirect()->route('home');
        }
       else 
        {
            Session::flash('alert-error', 'The username or password is incorrect. Please try again');
        }
       
    }
    public function logout(Request $request)
    {

        Auth::logout();
        $request->session()->invalidate();
        $request->session()->regenerateToken();

        return Redirect::route('login');

    }

}

login.blade.php:

<!DOCTYPE html>
<html>
    @include('layout.header')
     <!-- Custom Styles -->
  <link href="{{asset('css/stylesheet.css')}}" rel="stylesheet">
    <body style="text-align:center;">
<br><br><br><br>

       <div class="form">
            <h2>LOGIN</h2>
            <p>Please enter your credentials to login.</p>
        
        <form action="{{route('login.post')}}" method="POST" class="form-group">
        {{ csrf_field() }}
          <input type="text" name="username" id="username" placeholder="Username" class="form-control" required/><br><br>
          <input type="password" name="password" id="password" placeholder="Password" class="form-control" required/><br><br>
          <button type="submit" name="login" id="login" class="btn btn-primary">login</button><br><br>
          <a style="color:black;float:left;" href=" " >Change Password</a>
        </form>
</div>
    </body>
</html>

web.php (my routes)

<?php

use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider and all of them will
| be assigned to the "web" middleware group. Make something great!
|
*/

Route::get('/', function () {
    return view('login');
});
//login, logout routes
Route::get('login', 'App\Http\Controllers\LoginController@index')->name('login');
Route::post('/login/post',[App\Http\Controllers\LoginController::class, 'login'])->name('login.post');

Route::get('logout', 'App\Http\Controllers\LoginController@logout')->name('logout');
Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home');


Solution

  • Add it to your blade to show errors

     @error('username')
            <div class="alert alert-danger">{{ $message }}</div>
        @enderror
    

    And in your controller

     public function login(Request $request)
     {
        $request->validate([
            'username' => ['required'],
             'password' => ['required'],
        ]);
     
        $username = $request->input('username');
        $password = $request->input('password');
    
         if(Auth::attempt(['username' => $username, 'password' => $password, 'active' => 1])) {
               $request->session()->regenerate();
               session(['username' => 'username']);
               return redirect()->route('home');
            }
        
             return back()->withErrors([
                'username' => 'The provided credentials do not match our records.',
            ])->onlyInput('username');
           
        }