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