Mostrando entradas con la etiqueta Auth. Mostrar todas las entradas
Mostrando entradas con la etiqueta Auth. Mostrar todas las entradas

Impedir el acceso a un método de un controller si no eres el user logueado

 public function edit(Entry $entry) {
if (auth()->id() !== $entry->user_id) {
redirect("/");
}
        ...
}

También se puede hacer lo mismo en una vista:
@if ($entry->user_id == auth()->id())
...
@endif

Auth: Verificar email al registrarte

Nuestra tabla Users tiene que tener el campo email_verified_at que tiene que ser timestamp

En nuestro model Users:
class User extends Authenticatable implements MustVerifyEmail {

Y al crear las rutas para Auth poner:
Auth::routes(['verify' => true]);
Más información en:
https://laravel.com/docs/7.x/verification

Ojo: Si haces la prueba en local asegúrate que el email que registras está registrado en los emails que pueden recibir en mailgun y validado.

Autentificación tanto en controller como en las views

use Illuminate\Support\Facades\Auth;

$user = Auth::user();
return view('home', compact('user'));

En la view:
{{ $user->name }}

También se puede hacer así en la view:
{{ Auth::user()->name }}

Authentication a partir de Laravel 6.0

El sistema de authentication cambia completamente a partir de Laravel 6.0, los pasos a seguir son:

1. Nada más empezar un proyecto de cero poner los datos de la bd en .env
2. Ejecutar el php artisan migrate para que se creen las tablas de users y demás.
3. Tener instalado el node.js en tu ordenador (si no está entonces instalarlo y reiniciar el ordenador).
4. composer require laravel/ui:^2.4
5. php artisan ui vue --auth
6. npm install
7. npm run dev
Si quisieras crear un proyecto desde cero que contenga ya todo lo del auth simplemente al crearlo poner:
laravel new proyecto_con_auth --auth
Lógicamente para luego el login y el register en este nuevo proyecto funcione tienes que editar el .env y pasar el migrate para que cree las tablas de users y demás.
Si al hacer composer require laravel/ui te da un error ejecuta:
composer update --ignore-platform-reqs
composer require laravel/ui

Crear Auth

Crear una base de datos vacía y configurarla en el .env, por ejemplo:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=premios_nobel
DB_USERNAME=root
DB_PASSWORD=

Lo primero del todo el Laravel trae un error por defecto a la hora de hacer el migrate que hay que subsanar, en el fichero:
\app\Providers\AppServiceProvider.php añadir:

use Illuminate\Support\Facades\Schema;

Y editar la función boot con:
public function boot() {
   Schema::defaultStringLength(191);
}


CREAR LA TABLA USERS POR DEFECTO:
php artisan migrate:install
php artisan migrate

AÑADIR UN USERS AUTOMATICAMENTE A LA BD:
php artisan make:seeder UsersTableSeeder

Esto te genera en database/seeds/ el fichero UsersTableSeeder que hay que modificar la funcion "run" con;
factory(App\User::class, 50)->create()->each(function ($user) {
        $user->posts()->save(factory(App\Post::class)->make());
    });


Ojo: Hay que asegurarse que tengas incluidas las librerias:
use Illuminate\Database\Seeder;
use Illuminate\Support\Str;
use Illuminate\Support\Facades\DB;

En la bd (con el phpmyadmin por ejemplo) añadir a la tabla users el campo isAdmin y que sea booleano y por defecto 0. También cambiarlo en el modelo de Users (todos los módelos estan en /app/)

Finalmente ejecutarlo para que se metan esos 50 usuarios aleatorios en la BD:
php artisan db:seed --class=UsersTableSeeder


Vamos a meter el usuario administrador, en el run quitamos lo de antes y ponemos a pelo:
DB::table('users')->insert([
            'name' => 'Pepito Pérez',
            'email' => 'pepito.perez@gmail.com',
            'password' => '1234',
'isAdmin' => 1,
        ]);

Y volvemos a ejecutar otra vez:
php artisan db:seed --class=UsersTableSeeder

Si en algún momento necesitamos recompilar el composer porque se hayan hecho cambios:
composer dump-autoload

Instalar automáticamente toda la estructura del Login:
php artisan make:auth
Por defecto las rutas de los css y los js están mal porque hay que modificar el fichero resources/views/layouts/app.blade.php:
<link href="{{asset('/css/app.css')}}" rel="stylesheet">
<script src="{{asset('/js/app.js')}}"></script>


Para comprobar que está logueado como Admin por ejemplo en el controller de app/Http/Controllers/HomeController:
if (auth()->check()) {
            if (auth()->user()->isAdmin) {
                return view('administracion');
            }
            else {
                return view('home');
            }
        }


Luego desde el controller para saber si está logueado o no:
use Illuminate\Support\Facades\Auth;

public function xxx() {
   $user = Auth::user();
   if(!isset($user))  { // no está logueado
     return redirect('login');
  }
 return view('...');
}