Search code examples
phpcontrollerlaravel-9

Laravel9 Auth::user() retuns null


I am learning Laravel Framework. I am trying to redirect the user to Dashboard and get the user credential right after s/he is successfully registered. The problem is that I can register but when directed to Dashboard I get null object of a just registered user.

null object

DashboardController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class DashboardController extends Controller
{
    public function index()
    {
        dd(Auth::user());
        // or dd(auth()->user());
        return view('dashboard');         
    }
}

My routes in web.php

<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\DashboardController;
use App\Http\Controllers\Auth\RegisterController;

 Route::get('/dashboard', [DashboardController::class,'index'])->name('dashboard');
 Route::get('/register', [RegisterController::class,'index'])->name('register');
 Route::post('/register', [RegisterController::class,'store']);

RegisterController.php

<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;

class RegisterController extends Controller
{
    public function index() 
    {
        return view('auth.register');
    }

    public function store(Request $request)
    {
       $this->validate($request, [
           'name'=> 'required|max:255',
           'username' => 'required|max:255',
           'email' => 'required|email|max:255',
           'password' => 'required|confirmed',
       ]);
      
       User::create([
           'name' => $request->name,
           'username' => $request->username,
           'email' => $request->email,
           'password' => Hash::make($request->password),
       ]);
       return redirect()->route('dashboard');
    }
}

User.php Model

<?php
namespace App\Models;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;

class User extends Authenticatable
{
    use HasApiTokens, HasFactory, Notifiable;

    protected $fillable = [
        'name',
        'email',
        'password',
        'username',
    ];
    protected $hidden = [
        'password',
        'remember_token',
    ];
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];
}

I am using mysql db. Thanks in advance.


Solution

  • Try using any of the below Auth methods.

    1st

    $user = User::create([
        'name' => $request->name,
        'username' => $request->username,
        'email' => $request->email,
        'password' => Hash::make($request->password),
    ]);
    
    // here we're authenticating newly created user
    Auth::login($user);
    

    2nd

    // newly created user email & password can be passed in an attempt function.
    Auth::attempt(['email' => $email, 'password' => $password])
    

    3rd

    $user = User::create([
        'name' => $request->name,
        'username' => $request->username,
        'email' => $request->email,
        'password' => Hash::make($request->password),
    ]);
    // we can use loginUsingId like this
    Auth::loginUsingId($user->id);