Ir al contenido principal

Destacados

Ubuntu 25.04 instalación y configuración inicial

 Probamos Ubuntu 25.04 - Muy rápido y confiable !!

CakePhp 4 - Login y registro




Como hacer login y registro en cakephp 4

Descargo  CakePHP 

composer create-project --prefer-dist cakephp/app:~4.0 login-cake


Crear migración

bin/cake bake migration CreateUsers username:string email:string:unique password created modified 


Creo la tabla y campos

bin/cake migrations migrate


Creo el crud de usuarios

bin/cake bake all users

Instalo en plugin de autentificacion

composer require "cakephp/authentication:^2.4"

En la entidad user hacheo la contraseña

  use Authentication\PasswordHasher\DefaultPasswordHasher;

   protected function _setPassword(string $password) : ?string

    {

        if (strlen($password) > 0) {

            return (new DefaultPasswordHasher())->hash($password);

        }

    }

En src/Application.php agregar

// In src/Application.php add the following imports

use Authentication\AuthenticationService;

use Authentication\AuthenticationServiceInterface;

use Authentication\AuthenticationServiceProviderInterface;

use Authentication\Middleware\AuthenticationMiddleware;

use Cake\Routing\Router;

use Psr\Http\Message\ServerRequestInterface; 


//a la baseApplicacion exitente le agrego

// in src/Application.php

class Application extends BaseApplication

    implements AuthenticationServiceProviderInterface 

{

Entro al método middelware y después del

 ->add(new BodyParserMiddleware()) agrego el 

  ->add(new AuthenticationMiddleware($this));

Agregamos a continuación el método

public function getAuthenticationService(ServerRequestInterface $request): AuthenticationServiceInterface

{

    $authenticationService = new AuthenticationService([

        'unauthenticatedRedirect' => Router::url('/users/login'),

        'queryParam' => 'redirect',

    ]);


    // Load identifiers, ensure we check email and password fields

    $authenticationService->loadIdentifier('Authentication.Password', [

        'fields' => [

            'username' => 'email',

            'password' => 'password',

        ]

    ]);


    // Load the authenticators, you want session first

    $authenticationService->loadAuthenticator('Authentication.Session');

    // Configure form data check to pick email and password

    $authenticationService->loadAuthenticator('Authentication.Form', [

        'fields' => [

            'username' => 'email',

            'password' => 'password',

        ],

        'loginUrl' => Router::url('/users/login'),

    ]);


    return $authenticationService;

}

En // src/Controller/AppController.php
en el método initialize al final agregar 

 $this->loadComponent('Authentication.Authentication');

A continuación agrego el método

 public function beforeFilter(\Cake\Event\EventInterface $event)

{

    parent::beforeFilter($event);

    // Configure the login action to not require authentication, preventing

    // the infinite redirect loop issue

    $this->Authentication->addUnauthenticatedActions(['login']);

}

 

Agrego al controllador de users el método login

 // in src/Controller/UsersController.php

// in src/Controller/UsersController.php


    public function login()

    {

        $result = $this->Authentication->getResult();

        // If the user is logged in send them away.

        if ($result->isValid()) {

            return $this->redirect(['controller' => 'Users','action' => 'index']);

        }

        if ($this->request->is('post')) {

            $this->Flash->error('Invalid username or password');

        }

    }

Creo la plantilla para el login

// in templates/Users/login.php

<div class="users form content">

    <?= $this->Form->create() ?>

    <fieldset>

        <legend><?= __('Please enter your email and password') ?></legend>

        <?= $this->Form->control('email') ?>

        <?= $this->Form->control('password') ?>

    </fieldset>

    <?= $this->Form->button(__('Login')); ?>

    <?= $this->Form->end() ?>

</div>


* si ejecuto ya funciona

Voy a src/View/AppView.php

y agrego en el método inicialize

para ver el usuario desde cualquier parte de la aplicación


$this->loadHelper('Authentication.Identity');


- con esta linea $username = $this->Identity->get('username');

puedo ver el suario en cualquier parte 

lo agregaremos a la vista de index

 <?= $username = $this->Identity->get('username'); ?>

 

 puedo ver tambien el correo del usuario

 <?= $username = $this->Identity->get('email'); ?>

 

Agrego el logout al controlador users

 // in src/Controller/UsersController.php

public function logout()

{

    $result = $this->Authentication->getResult();

    // regardless of POST or GET, redirect if user is logged in

    if ($result && $result->isValid()) {

        $this->Authentication->logout();

        return $this->redirect(['controller' => 'Users', 'action' => 'login']);

    }

}

Si deseo dar permiso para crear el primer usuario

debo agregar el add en src/Controller/AppController.php

 

public function beforeFilter(\Cake\Event\EventInterface $event)

{

    parent::beforeFilter($event);


    $this->Authentication->allowUnauthenticated(['login','add']); <---

}

Agregar en el menú de la aplicación la opción de logout

debo agregar donde quiera 

<?= $this->Html->link('Salir',['controller' => 'Users','action' => 'logout']) ?>

Si deseo mostrarlo solo cuando este logeado

<?= $username = $this->Identity->get('email'); ?>

    <?php if ($username){?>

       <?= $this->Html->link('Salir',['controller' => 'Users','action' => 'logout']) ?>

    <?php } ?>


AHORA SI ENTRO A users/add 

podre agregar usuarios

luego de esto lo quito de nuevo si lo deseo


Comentarios

Entradas populares de este blog

Reseteo de canon ip 1800 y 1900

Veremos en este vídeo las dos formas de resetear estas impresoras la segunda forma es definitiva. También aprendemos como resetear los cartuchos para que muestre el nivel de tinta después de las recargas. Descarga del programa utilizado en el video : bajar  

CloudFlare en vez de DuckDns

Vamos a dejar de usar Duckdns para usar un dominio propio que compramos Ademas ya sabemos que nuestra ip cambia y vamos a solucionarlo con una app usando docker compose Comenzamos con los pasos: 1- Comprar un dominio  2 - Registrarnos en CloudFlare justo ahi es de donde sacaremos las dns ej dn1.claudflare.com, dn2.claudflare.com 3- Copiaremos esas dns y las pegaremos en nuestro dominio para eso entramos a hostinger y editamos las dns que vienen por defecto y las cambiamos por estas,  esto da el control de todo a cloudflare a partir de ese momento trabajaremos solo en cloudflare. 4 - Vamos a nuestro menú Perfil en cloudFlare y creamos un token como muestra la imagen    5- En claudflare le damos clic al logo y nos vamos a la pagina de inicio y agregamos el nombre de nuestro dominio comprado ej compucenter33.com 6- Entramos haciendo clic en el dominio y nos vamos al menú a la izquierda que dice DNS ahí creamos un registro A  nos queda así  El primer registro A...

Carrito de compras en laravel

Bienvenido a la creación de un Shopping Cart rápido y simple!!! Crearemos entonces un carrito usando laravel de una manera muy rápida y fácil aquí encontraras todos los pasos correspondientes a el video: Deberías ya tener el entorno de trabajo pronto, para eso instalas xampp, visual studio code y git con eso listo, comencemos: Paso 1 - Creamos un proyecto nuevo: composer create-project --prefer-dist laravel/laravel blog "6.*" Paso 2 - Instalamos en componente shopping cart "nuestro carrito" composer require "darryldecode/cart" Paso 3 - Abrimos el archivo de nuestro proyecto config/app.php y en el array de nombre Aliases al final pega esto: 'Cart' => Darryldecode\Cart\Facades\CartFacade::class Paso 4 - Crea el Modelo Product y su archivo de migración php artisan make:model Product -m Paso 5 - Agrega los campos para nuestra migración products Schema::create('products', function (Blueprint $table) { ...