Laravel 10 custom login/registration does not enter the dashboard page
P粉162773626
P粉162773626 2023-09-05 14:04:13
0
2
518
<p>I'm trying to make my own custom Laravel 10 login/registration as I don't want to use the breez package as I want to learn how to do the login/registration myself. </p> <p>But I can't seem to authenticate to the dashboard page. </p> <p>I use the if statement <code>if(Auth::check())</code> on the dashboard function to authenticate the user in the database. </p> <p>But this doesn't work for me because I keep getting the error message from redirecting back to the login page (<strong>This only happens when I register a new user into the database</ strong>), but whenever I try to log in I receive a success message from the login function (<strong>See code further</strong>) while still in the login page. </p> <p><strong>AuthController (dashboard): </strong></p> <pre class="brush:php;toolbar:false;">public function dashboard(): View { if(Auth::check()) { return view('auth.dashboard'); } return view('auth.login')->with('error', 'You are not allowed to access'); }</pre> <p><strong>AuthController (login): </strong></p> <pre class="brush:php;toolbar:false;">public function loginPost(Request $request): RedirectResponse { $request->validate([ 'email' => 'required', 'password' => 'required' ]); $credentials = $request->only('email', 'password'); if(Auth::attempt($credentials)) { $request->session()->regenerate(); return redirect()->intended(route('dashboard'))->with('success', 'You have successfully logged in'); } return redirect(route('login'))->with('error', 'Oppes! You have entered invalid credentials'); }</pre> <p><strong>web.php</strong></p> <pre class="brush:php;toolbar:false;">Route::get('/register', [AuthController::class, 'register'])->name('register'); Route::post('/register', [AuthController::class, 'registerPost'])->name('register.post'); Route::get('/login', [AuthController::class, 'login'])->name('login'); Route::post('/login', [AuthController::class, 'loginPost'])->name('login.post'); Route::get('/dashboard', [AuthController::class, 'dashboard'])->name('dashboard'); Route::post('/logout', [AuthController::class, 'logout'])->middleware('auth')->name('logout');</pre> <p>I haven't found any solution yet, so if anyone can help me I'd be grateful. </p>
P粉162773626
P粉162773626

reply all(2)
P粉006540600

hii, your logout functionality is protected by middleware, you also need to add dashboard routing middleware, you can group routes that require authentication middleware.

Route::middleware('auth')->group(function () {
    Route::get('/dashboard', [AuthController::class, 'dashboard'])->name('dashboard');
    Route::post('/logout', [AuthController::class, 'logout'])->name('logout');
});
P粉676588738

Your route

Route::get('login', [FrontendAuthController::class, 'loginGet'])->name('login');
Route::post('login', [FrontendAuthController::class, 'loginPost']);
Route::post('logout', [FrontendAuthController::class, 'logout'])->name('logout');
Route::get('register', [FrontendAuthController::class, 'registerGet'])->name('register');
Route::post('register', [FrontendAuthController::class, 'registerPost']);

Your controller:

<?php

namespace App\Http\Controllers\Frontend;

use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Session;

class FrontendAuthController extends Controller
{
    public function loginGet(Request $request)
    {
        return view('front.auth.login');
    }

    public function loginPost(Request $request)
    {
        $request->validate([
            'email' => 'required|email',
            'password' => 'required',
        ], [
            'email.required' => 'The email field is required.',
            'email.email' => 'Please enter a valid email address.',
            'password.required' => 'The password field is required.',
        ]);

        $credentials = $request->only('email', 'password');
        if (Auth::attempt($credentials)) {
            return redirect()->intended('/');
        } else {
            return redirect()->back()->withErrors(['email' => 'These credentials do not match our records.']);
        }
    }

    public function logout()
    {
        Auth::logout();
        Session::flush(); // Clear all session data
        Session::regenerate(); // Regenerate the session ID
        return redirect()->route('login');
    }

    public function registerGet()
    {
        return view('front.auth.register');
    }

    public function registerPost(Request $request)
    {
        $request->validate([
            'name' => 'required|string|max:255',
            'email' => 'required|email|unique:users,email',
            'password' => 'required|min:8|confirmed',
        ], [
            'name.required' => 'The name field is required.',
            'email.required' => 'The email field is required.',
            'email.email' => 'Please enter a valid email address.',
            'email.unique' => 'This email address is already registered.',
            'password.required' => 'The password field is required.',
            'password.min' => 'The password must be at least 8 characters.',
            'password.confirmed' => 'The password confirmation does not match.',
        ]);

        // Create a new user record
        $user = new User();
        $user->name = $request->input('name');
        $user->email = $request->input('email');
        $user->password = Hash::make($request->input('password'));
        $user->save();

        // Log in the newly registered user
        Auth::login($user);

        // Redirect the user to the home page or any other desired page
        return redirect()->intended('/');
    }
}

Your login blade

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Sign In</title>

    <link rel="stylesheet" href="{{ url('frontend/css/style.css') }}">
</head>

<body>
    <div class="main">
        <section class="signup">

            <div class="container">
                <div class="signup-content">

                    <form id="signup-form" class="signup-form" method="POST" action="{{ url('login') }}">
                        @csrf
                        <!--    <img src="images/logo.svg" alt="">-->
                        <h2 class="form-title">Login Here</h2>
                        <div class="form-group">
                            <input type="email" class="form-input" value="{{ old('email') }}" name="email"
                                id="email" placeholder="Your Email" />
                        </div>
                        <div class="form-group">
                            <input type="text" class="form-input" name="password" id="password"
                                placeholder="Password" />
                            <span toggle="#password" class="zmdi zmdi-eye field-icon toggle-password"></span>
                        </div>
                        @error('email')
                            <div style="color: red">{{ $message }}</div>
                        @enderror

                        @error('password')
                            <div style="color: red">{{ $message }}</div>
                        @enderror
                        <div class="form-group">
                            <input type="submit" name="submit" id="submit" class="form-submit" value="Sign in" />
                        </div>
                    </form>
                    <p class="loginhere">
                        New User? <a href="reg-form.html" class="loginhere-link">Register here</a>
                    </p>
                </div>
            </div>
        </section>
    </div>
</body>

</html>

Your registration page

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Register</title>

    <link rel="stylesheet" href="{{ url('frontend/css/style.css') }}">
</head>

<body>
    <div class="main">
        <section class="signup">

            <div class="container">
                <div class="signup-content">

                    <form id="signup-form" class="signup-form" method="POST" action="{{ route('register') }}">
                        @csrf
                        <h2 class="form-title">Register Here</h2>
                        <div class="form-group">
                            <input type="text" class="form-input" value="{{ old('name') }}" name="name" id="name"
                                placeholder="Your Name" />
                        </div>
                        <div class="form-group">
                            <input type="email" class="form-input" value="{{ old('email') }}" name="email"
                                id="email" placeholder="Your Email" />
                        </div>
                        <div class="form-group">
                            <input type="password" class="form-input" name="password" id="password"
                                placeholder="Password" />
                            <span toggle="#password" class="zmdi zmdi-eye field-icon toggle-password"></span>
                        </div>
                        <div class="form-group">
                            <input type="password" class="form-input" name="password_confirmation"
                                id="password_confirmation" placeholder="Confirm Password" />
                        </div>
                        @error('name')
                            <div style="color: red">{{ $message }}</div>
                        @enderror

                        @error('email')
                            <div style="color: red">{{ $message }}</div>
                        @enderror

                        @error('password')
                            <div style="color: red">{{ $message }}</div>
                        @enderror

                        <div class="form-group">
                            <input type="submit" name="submit" id="submit" class="form-submit" value="Register" />
                        </div>
                    </form>
                    <p class="loginhere">
                        Already have an account? <a href="{{ route('login') }}" class="loginhere-link">Login here</a>
                    </p>
                </div>
            </div>
        </section>
    </div>
</body>

</html>

I think this will solve all your questions

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template