Esta documentación resume los pasos clave y conceptos importantes para crear una aplicación Laravel sencilla como la desarrollada:
/publicDocumentRoot /var/www/miapplaravel/public
<Directory /var/www/miapplaravel/public>
AllowOverride All
Require all granted
</Directory>
Separación clara entre:
use App\Http\Controllers\PageController;
use App\Http\Controllers\AuthController;
use Illuminate\Support\Facades\Route;
// Públicas
Route::get('/', [PageController::class, 'index'])->name('home');
Route::get('/login', [AuthController::class, 'showLogin'])->name('login');
Route::post('/login', [AuthController::class, 'login']);
Route::get('/registro', [AuthController::class, 'showRegistro'])->name('registro');
Route::post('/registro', [AuthController::class, 'registro']);
// Logout (POST obligatorio)
Route::post('/logout', [AuthController::class, 'logout'])->name('logout');
// Protegidas
Route::get('/proyectos', [PageController::class, 'proyectos'])->name('proyectos')->middleware('auth');
Route::get('/proyecto', [PageController::class, 'proyecto'])->name('proyecto')->middleware('auth');
Tabla personalizada usuarios.
Schema::create('usuarios', function (Blueprint $table) {
$table->id();
$table->string('username')->unique();
$table->string('description');
$table->string('email')->unique();
$table->string('password');
$table->timestamps();
});
Ejecutar solo esta migración en el servidor:
php artisan migrate --path=database/migrations/xxxx_xx_xx_create_usuarios_table.php
Archivo: app/Models/Usuario.php
namespace App\Models;
use Illuminate\Foundation\Auth\User as Authenticatable;
class Usuario extends Authenticatable
{
protected $table = 'usuarios';
protected $fillable = [
'username',
'description',
'email',
'password'
];
protected $hidden = [
'password',
];
}
Archivo: config/auth.php
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\Models\Usuario::class,
],
],
Archivo: app/Http/Controllers/AuthController.php
Login
use Illuminate\Support\Facades\Auth;
use Illuminate\Http\Request;
public function login(Request $request)
{
$credentials = $request->validate([
'email' => 'required|email',
'password' => 'required',
]);
if (Auth::attempt($credentials)) {
$request->session()->regenerate();
return redirect()->route('proyectos');
}
return back()->withErrors([
'email' => 'Credenciales incorrectas',
]);
}
use App\Models\Usuario;
use Illuminate\Support\Facades\Hash;
public function registro(Request $request)
{
$data = $request->validate([
'username' => 'required|unique:usuarios',
'description' => 'required',
'email' => 'required|email|unique:usuarios',
'password' => 'required|min:6',
]);
Usuario::create([
'username' => $data['username'],
'description' => $data['description'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
]);
return redirect()->route('login');
}
use Illuminate\Support\Facades\Auth;
public function logout(Request $request)
{
Auth::logout();
$request->session()->invalidate();
$request->session()->regenerateToken();
return redirect()->route('login');
}
Login (login.blade.php)
<form method="POST" action="{{ route('login') }}">
@csrf
<input type="email" name="email" required>
<input type="password" name="password" required>
<button type="submit">Entrar</button>
</form>
Logout (IMPORTANTE: POST)
<form method="POST" action="{{ route('logout') }}">
@csrf
<button type="submit">
<i class="fa-solid fa-arrow-right-from-bracket"></i>
</button>
</form>
En el controlador
use Illuminate\Support\Facades\Auth;
public function proyectos()
{
$usuario = auth()->user();
return view('proyectos',['usuario'=>$usuario]); // muestra proyectos.blade.php
}
En la vista (proyectos.blade.php)
<h1>Bienvenido, {{ $usuario->description }}</h1>
Laravel redirige automáticamente a /login si:
La ruta tiene middleware auth
No hay sesión iniciada
Route::get('/proyectos', [PageController::class, 'proyectos'])->name('proyectos')->middleware('auth');
Route::get('/proyecto', [PageController::class, 'proyecto'])->name('proyecto')->middleware('auth');
CSS fuente → resources/css/app.css
Se compila a public/build
En vistas:
@vite('resources/css/app.css')
Comandos:
npm install
npm run build
php artisan view:clear
php artisan route:clear
php artisan config:clear
php artisan cache:clear