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.
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.
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);