Ergebnis 1 bis 2 von 2

Thema: Frontendlogin via Controller

  1. #1
    Contao-Nutzer
    Registriert seit
    04.04.2024.
    Beiträge
    1

    Beitrag Frontendlogin via Controller

    Guten Tag Liebe Contao Community,

    ich versuche über eine SAML Schnittstelle einen User einzuloggen.

    Der Datensatz wird über das MemberModel angelegt und auch

    PHP-Code:
    $this->authorizationChecker->isGranted('IS_AUTHENTICATED_REMEMBERED'
    wirft true zurück.

    Das ist mein Controller

    PHP-Code:
             $this->authenticateUser($attributesData['DatenuebermittlerPseudonymId']);
            
            if (
    $this->authorizationChecker->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
                
    $session->set('mukuser'$attributesData['DatenuebermittlerPseudonymId']);
                
    $session->set('muklogin'true);
                
    Controller::redirect('/dashboard.html');
            }
            
    Controller::redirect('/dashboard.html?error=true'); 
    Und das die authenticateUser Funktion.

    PHP-Code:
        private function authenticateUser(string $username): void
        
    {
            
    $member MemberModel::findOneBy('username'$username);

            if (
    null === $member) {
                throw new \
    Exception('Benutzer nicht gefunden.');
            }

            
    $customUser = new CustomUser($member);
            
    $token = new UsernamePasswordToken($customUser'contao_frontend'$customUser->getRoles());
            
    $this->tokenStorage->setToken($token);   
            
    $request Request::createFromGlobals();
            
    $event = new InteractiveLoginEvent($request$token);
            
    $this->eventDispatcher->dispatch($eventInteractiveLoginEvent::class);
            
    $member->lastLogin time();
            
    $member->save();
        } 
    Die Klasse CustomUser

    PHP-Code:
    class CustomUser implements UserInterface
    {
        private 
    $member;

        public function 
    __construct(MemberModel $member)
        {
            
    $this->member $member;
        }

        public function 
    getRoles(): array
        {
            return [
    'ROLE_MEMBER'];
        }

        public function 
    getPassword(): string
        
    {
            return 
    $this->member->password;
        }

        public function 
    getSalt()
        {
            return 
    null;
        }

        public function 
    getUsername(): string
        
    {
            return 
    $this->member->username;
        }

        public function 
    eraseCredentials()
        {
        }

        public function 
    getUserIdentifier(): string
        
    {
            return 
    $this->getUsername();
        }

    Doch wieso wird der Nutzer dann im dashboard.html nicht als eingeloggt erkannt, dort ist die Abfrage
    PHP-Code:
    $this->authorizationChecker->isGranted('IS_AUTHENTICATED_REMEMBERED'
    = NULL

    Kann es sein, dass ich irgendetwas übersehe?

    Zur Info noch meine services.yaml
    PHP-Code:
    # config/services.yaml
    services:
        
    _defaults:
            
    autowiretrue     
            autoconfigure
    true
            
    public: false       


        
    # Konfiguration für den SamlController
        
    App\Controller\SamlController:
            public: 
    true
            tags

                - { 
    name'controller.service_arguments' }
            
    arguments
                
    $framework'@contao.framework'
                
    $tokenStorage'@security.token_storage'
                
    $authorizationChecker'@security.authorization_checker'
                
    $eventDispatcher'@event_dispatcher' 
    Und meine security.yaml
    PHP-Code:
    security:
        
    firewalls:
            
    contao_frontend:
                
    pattern: ^/saml
                anonymous
    true 

  2. #2
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.126
    Partner-ID
    10107

    Standard

    Ich denke das müsstest du als Custom Authenticator umsetzen. Die Firewall Anpassung musst du außerdem über ein Contao Manager Plugin via ExtensionPluginInterface umsetzen.
    » sponsor me via GitHub or PayPal or Revolut

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •