Zum Inhalt

Benutzerdefinierter Login-Manager

Über einen benutzerdefinierten Login-Manager können Sie das standardmäßige Login-Verhalten des Contentfly CMS erweitern oder anpassen. Folgende Beispiele können mit einem eigenen Login-Manager umgesetzt werden:

  • Benutzerlogin nur durch einen Pincode
  • Benutzerlogin gegenüber einem Drittsystem (z.B: ERP-System), SSO (Single Sign On)

Login über API

Benutzerdefinierte Login-Manager können über die API verwendet werden. Dafür ist der Authentifizierung lediglich der entsprechende Name des Login-Managers anzugeben.

1
2
3
4
5
6
7
8
POST: auth/login

REQUEST:
{
  "user:" : "username",
  "pass": "password",
  "loginManager": "CustomLoginManager"
}

Login-Manager erstellen

Um einen benutzerdefinierten Login-Manager verwenden zu können, muss dieser im Ordner custom/Classes von der Klasse Areanet\PIM\Classes\Manager\LoginManager abgeleitet werden. Zwingend implementiert werden muss dabei die Mathode auth(), die einen gültigen Benutzer vom Typ Areanet\PIM\Entity\User zurückgeben muss.

custom/Classes/CustomLoginManager.php

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
<?php
namespace Custom\Classes;

use Areanet\PIM\Classes\Manager\LoginManager;

class CustomLoginManager extends LoginManager
{
    public function auth(){
        $user = ...
        return $user; //Areanet\PIM\Entity\User
    }

}

Beispiel: SSO

API-Aufruf

1
2
3
4
5
6
7
8
POST: auth/login

REQUEST:
{
  "user:" : "username",
  "pass": "password",
  "loginManager": "ERPLoginManager"
}

Login-Manager

custom/Classes/ERPLoginManager.php

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
namespace Custom\Classes;

use Areanet\PIM\Classes\Manager\LoginManager;

class ERPLoginManager extends LoginManager
{
    public function auth(){
        $username = $this->request->get('user');
        $password = $this->request->get('pass');
        if(!$this->erpAuth($username, $password)){
            throw new \Exception('Authentifizeriung fehlgeschlagen.');
        }

        return $this->createManagedUser($username);
    }

    protected function erpAuth($username, $password){
        //Prüfe gegen ERP-Drittsystem per Curl
        return true;
    }
}

Im obigen Beispiel prüft der Login-Manager die Authentifizeriung über Benutzername und Passwort gegenüber einem externen ERP-System. Ist die Authentifizeriung über das ERP-System erfolgreich, legt die Hilfsmtethode createManagedUser() einen Dummy-Benutzer (einen sogenannten "Managed User") im Contentfly CMS an und gibt das User-Objekt entsprechend wieder zurück.

Managed Users

Managed Users können sich nicht über das normale UI-Login im Backend anmelden. Eine Authentifizeriung ist nur über die Login-API und der Angabe des Login-Managers (s.o.) möglich. Somit erfolgt die Authentifizeriung immer gegenüber dem Drittsystem.

Beispiel: Login über Pincode

API-Aufruf

1
2
3
4
5
6
7
POST: auth/login

REQUEST:
{
  "pin:" : "1234",
  "loginManager": "PincodeLoginManager"
}

Login-Manager

custom/Classes/PincodeLoginManager.php

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
<?php
namespace Custom\Classes;

use Areanet\PIM\Classes\Manager\LoginManager;

class PincodeLoginManager extends LoginManager
{
    public function auth(){
        $pin = $this->request->get('pin');

        $user = $this->app['orm.em']->getRepository('Areanet\PIM\Entity\User')->findOneBy(array('pin' => $pin));
        if (!$user) {
            throw new \Exception('Ungültiger Pincode.', 401);
        }

        return $user;
    }
}