deimsantafe / stg-cas-bundle

Bundle de CAS para Symfony
3 stars 2 forks source link

Error al instalar en Symfony 5.4: Too few arguments to function phpCAS::client() #4

Closed emiliano-sangoi closed 1 year ago

emiliano-sangoi commented 1 year ago

Hola,

Instale el bundle en un Symfony 5.4 corriendo en un servidor Apache con PHP v8.1.16.

Seguí todos los pasos de instalación como detalla la documentación, hice pequeñas modificaciones en la configuración, como por ejemplo definición de usuarios en memoria en lugar de por base de datos y cambio en nombre de las rutas, nada importante.

Al intentar acceder desde el navegador a la aplicación aparece el siguiente error: screenshot-localhost_8000-2023 02 16-08_50_46

Por lo que uno puede ver en el archivo vendor/stgbundle/cas-bundle/Service/CasService.php, se pasan los siguientes 4 parámetros en el constructor:

// ...
// vendor/stgbundle/cas-bundle/Service/CasService.php
// linea 34
protected function initPhpCas()
    {
        phpCAS::setLogger($this->getDebug());
        phpCAS::setVerbose(false);
        if (!phpCAS::isInitialized()) {
            phpCAS::client(
                $this->getVersion(),
                $this->getHostname(),
                $this->getPort(),
                $this->getUrl()
            );
        }
// ...

Y el método client() de la clase phpCAS (archivo: vendor/jasig/phpcas/source/CAS.php, linea 348) requiere 5 no nulos:


// linea 348:
 public static function client($server_version, $server_hostname,
        $server_port, $server_uri, $service_base_url,
        $changeSessionID = true, \SessionHandlerInterface $sessionHandler = null
    ) {

// ...

En síntesis, pareciera que habría que pasarle un parámetro mas en el método initPhpCas(...) del bundle o no se que estoy haciendo mal.

Modifique el nombre de las rutas pero no creo que tenga algo que ver.

Dejo como referencia los archivos actuales.

DefaultController.php

<?php

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

class DefaultController extends AbstractController
{
    #[Route('/', name: 'app_default')]
    public function index(): Response
    {
        return $this->render('default/index.html.twig', [
            'controller_name' => 'DefaultController',
        ]);
    }

    #[Route('/logout', name: 'app_logout')]
    public function logout()
    {
    }

    #[Route('/failure', name: 'app_failure')]
    public function failure(Request $request): Response
    {
        return new Response(
            'Error al autenticar - Usuario: ' . $request->get('user')
        );
    }

}

default_controller

security:
    enable_authenticator_manager: true
    # https://symfony.com/doc/current/security.html#registering-the-user-hashing-passwords
    password_hashers:
        Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface: 'auto'
    # https://symfony.com/doc/current/security.html#loading-the-user-the-user-provider
    providers:
        app_user_provider_memory:
            memory:
                users:
                    usuario2: { password: 'la password de usuario2', roles: [ 'ROLE_ADMIN' ] }
#                    jane_admin: { password: '$2y$13$PFi1I ... rGwXCZ', roles: [ 'ROLE_ADMIN', 'ROLE_SUPER_ADMIN' ] }
    firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false

        secure:
            pattern: ^/
            provider: app_user_provider_memory
            custom_authenticators:
                - stg.cas_authenticator
            logout:
                path: /secure/logout
        main:
            lazy: true
#            provider: app_user_provider_memory

            # activate different ways to authenticate
            # https://symfony.com/doc/current/security.html#the-firewall

            # https://symfony.com/doc/current/security/impersonating_user.html
            # switch_user: true

    # Easy way to control access for large sections of your site
    # Note: Only the *first* access control that matches will be used
    access_control:
#         - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
         - { path: ^/, roles: ROLE_ADMIN }
        # - { path: ^/profile, roles: ROLE_USER }
deimsantafe commented 1 year ago

Se fijo la version 1.5.0 de jasig/phpcas