Content Management System - CMS : eXV2 
Home
News
Forum
Downloads
Download Module
Sitemap
Partnerseiten
RSS News
Kontakt/Info
Sprache
EnglishFrench
Suchen
Login
Nickname
Passwort

Registrieren?
Passwort?
Navigation
 Home News  Forum Neueste Beiträge  Downloads Download Module eXV² Themes  Weblinks Tutorial Changelog 2.3.1 Jobcenter Gebrauchtmarkt OSMap  Sponsor Kalendersystem Sitemap Partnerseiten RSS News Kontakt/Info Webseiten Wetter
Willkommen im Free Web CMS : eXV² Forum!
  Forenarchiv
     eXV2 Module
  Chat extern - integration ins System - Hilfe nötig...

Forum : eXV2 Module

Titel : Chat extern - integration ins System - Hilfe nötig...

© 2004-2012 www.exv2.de
http://www.exv2.de

URL dieser Diskussion
http://www.exv2.de/modules/newbb_plus/viewtopic.php?topic_id=484&forum=7


 webworker :

11.07.2003 16:59
 So, nun einmal an alle die einen "neuen Chat" suchen. Ich habe testweise den GTChat installiert und bin von dem Teil begeistert. Um nun die Userdatenbank "abzugreifen" habe ich eine Implementierungsdoku. Was mir fehlt sind Kenntnisse und schlimmer fast noch ZEIT... Wer kann mir dabei helfen?
Vielleicht auch jemand, der eine Chatlösung sucht?

Hier der Integrationsauszug:

Integration von GT-chat in bestehende Strukturen
Ich bekomme oft die Frage gestellt, wie man GT-chat mit einer bestehenden Community/Forum/Wasauchimmer (im Folgenden: externes System) zusammenführt, so daß die gleichen Benutzerdaten verwendet werden und ein gemeinsamer Login möglich wird. Die Antwort auf diese Frage ist natürlich stark von dem verwendeten System abhängig und nicht ohne einiges an Programmierkenntnissen umsetzbar. Ich will hier in allgemeiner Form die Änderungen anzeigen, die auf der Seite von GT-chat notwendig sind.

Da die entscheidenden Stellen des Programmtextes seit Version 0.95 offenstehen, könnte man einfach die Benutzer- und Sessionverwaltung (Plugins DataModules/UserModule.pm und DataModules/OnlineModule.pm) austauschen, damit direkt auf die Daten des externen Systems zugegriffen wird. Jedoch ist die Neuprogrammierung dieser Module eine aufwendige und fehlerträchtige Arbeit. Vor allem aber erfordert dieser Ansatz meistens auch Änderungen am externen System, damit dessen Datenbank auch die Daten aufnehmen kann, die nur von GT-chat gebraucht werden.

Im Folgenden wird ein anderer Ansatz vorgestellt, der einen geringeren Programmieraufwand verspricht und meistens keine oder kaum Änderungen des externen Systems erfordert. Dabei behalten sowohl GT-chat als auch das externe System ihre getrennte Benutzer- und Sessionverwaltung bei, diese werden lediglich an entscheidenden Stellen verbunden.

Ich empfehle es, den Links auf die Dokumentation Beachtung zu schenken, da man sonst wichtige Details übersehen könnte.
Externer Login
Als erstes soll GT-chat die Authentifizierung des Benutzers aus dem externen System übernehmen, damit dieser nicht noch einmal sein Paßwort eingeben muß. Dazu erstellt man ein EnvironmentHandler-Plugin, der ungefähr so aussieht:

sub getEnvironment
{
my ($self, $main, $environment) = @_;

my $external_user = getExternalLogin();
if (defined($external_user))
{
unless ($environment->{has_uncrypted_password})
{
$environment->{name} = $external_user->{name};
$environment->{is_username} = 1;
$environment->{has_password} = $self;
}
}
else
{
# Folgende Zeile stellt sicher, daß sich alle
# Chat-Besucher vorher beim externen System eingeloggt
# haben. Sie kann gelöscht werden, falls das
# unnötig ist.
$main->fatal_error('nopermission');
}
}

sub checkPassword
{
# Passwortüberprüfung ist schon beim externen System
# geschehen, keine zusätzliche Überprüfung hier.
return 1;
}



Dabei soll die Funktion getExternalLogin() dazu dienen, die Daten des angemeldeten Benutzers beim externen System abfragen. Normalerweise wird das anhand eines Cookie oder einer Session-ID in der URL gemacht. Falls der Chat eine Session-ID in der URL bekommt, sollte man auch dafür sorgen, daß diese weitergegeben wird (siehe $main->{settings}{forward_params}).

Hierdurch werden Benutzername und Paßwort des Benutzers festgelegt, also braucht man ihm eigentlich die Login-Seite gar nicht mehr zu zeigen. Sobald die Verbindungsüberprüfung festgestellt hat, ob sicherer Modus notwendig ist, kann der Benutzer eingeloggt werden. Dazu hängt man bei den Weiterleitungslinks im Template proxycheck_bottom.html noch &action=login an.

Übernahme der Benutzerdaten
Es ist relativ kompliziert, zwei Benutzerdatenbanken gleichzeitig zu verwalten. Deswegen ist die Idee hier: der Chat soll die Benutzerdaten erst bekommen, wenn er sie braucht. Dafür stellt GT-chat die UserGenerator-Schnittstelle zur Verfügung. Ein Plugin, das diese Schnittstelle implementiert, kommt zum Einsatz, wenn sich ein Benutzer mit einem nicht existierenden Benutzernamen einzuloggen versucht. Bei Erfolg wird ein neuer Account erzeugt. Für den Fall der Datenübernahme würde das z.B. so aussehen:

sub generateUser
{
my ($self, $main, $user) = @_;

my $external_user = getExternalUser($user->{name});

if (defined($external_user))
{
$external_user->{password} = '';
$external_user->{registration} = $main->{now};

$main->{runtime}{allow_registration} = 1;

return $external_user;
}
else
{
return undef;
}
}

sub cleanUp
{
# Einmal erstellte Accounts sollen nicht gelöscht werden,
# also ist hier nichts zu tun.
}



Hier soll die Funktion getExternalUser(username) die Benutzerdaten anhand des angegebenen Namens aus der Benutzerdatenbank des externen Systems laden. Wurde ein Benutzer gefunden, wird ein entsprechender GT-chat-Account erstellt und der Benutzer eingeloggt. Auf die Variable $main->{runtime}{allow_registration} wird später noch eingegangen.

Für einen neuen Benutzer-Account sollten mindestens die Felder name, nick und group gesetzt werden, das Feld email ist empfehlenswert. Das Feld password wird man normalerweise mit einer leeren Zeichenfolge belegen, wodurch das Einloggen in den Account ohne externe Authentifizierung unmöglich wird.

Datenabgleich
Es reicht nicht, einen Account zu erstellen, man muß ihn auch auf dem neuesten Stand halten. Haben sich irgendwelche Daten im externen System geändert, müssen sie sich auch im Chat ändern. Eine günstige Stelle für den Datenabgleich ist der Login-Vorgang. Ein LoginChecker-Plugin kann beim Login alle notwendigen Datenfelder ändern, z.B. so:

sub checkLogin
{
my($self,$main,$user,$room) = @_;

my $external_user = getExternalUser($user->{name});

foreach my $key (keys %$external_user)
{
$user->{$key} = $external_user->{$key};
}
}



Hier wird wieder die Funktion getExternalUser(username) benutzt, um die Daten des Benutzers aus dem externen Systems zu laden. Diese werden anschließend in den aktiven Account übertragen.

Überflüssiges entfernen
Als letztes hat man noch die Aufgabe, "überflüssige" Funktionalität aus dem Chat zu entfernen. So können z.B. die Profilfelder, die der Chat jetzt mit dem externen System teilt, in beiden Systemen geändert werden. Die vorgestellte Methode zum Datenabgleich impliziert schon, daß diese Möglichkeit beim Chat entfernt wird. Dafür reicht es, die entsprechenden Felder aus dem Template editprofile.html zu entfernen. Eine sichere Sperrung der Änderungen ist nicht notwendig, da die Daten sowieso bei jedem Login überschrieben werden.

Weiterhin will man meistens die komplette Benutzerverwaltung beim externen System lassen, damit werden die Links zur Registrierung und Paßwortwiederherstellung auf der Login-Seite unnötig und können aus dem Template login.html entfernt werden.

Es schadet auch nicht, Registrierungen auf normalen Wege wirklich unmöglich zu machen, da die Entfernung des Links allein keine vollkommene Sicherheit garantiert. Man kann die ProfileChecker-Schnittstelle benutzen, um Registrierungen nur dann zuzulassen, wenn die Variable $main->{runtime}{allow_registration} gesetzt ist (zu beachten: unser UserGenerator-Plugin setzt sie). Die Bezeichnung allow_registration ist dabei frei gewählt worden, sie hat keine besondere Bedeutung für GT-chat. Der Code sähe so aus:

sub checkProfile
{
my ($self,$main,$user,$olduser) = @_;

if (!defined($olduser) && !$main->{runtime}{allow_registration})
{
$main->fatal_error('nopermission');
}
}



Dabei ist zu beachten: falls der Gastzugang aktiv bleiben soll, muß auch das Plugin GuestLogin.pm so abgeändert werden, daß es die Variable $main->{runtime}{allow_registration} setzt. Meistens braucht man aber auch den Gastzugang nicht, also deaktiviert man ihn in Settings.dat.

Downloads
Hier nochmal alle Code-Ausschnitte als Plugin-Schablone zusammengefaßt: ExternalLink.pm

Beispiel für zusätzliche Eintragungen in Settings.dat zur Aktivierung des Plugins:

{
custom_environment_handlers => ['plugindir::ExternalLink.pm'],

custom_user_generators => ['plugindir::ExternalLink.pm'],

custom_login_checker => ['plugindir::ExternalLink.pm'],

custom_profile_checker => ['plugindir::ExternalLink.pm'],
}

 p-tree :

16.01.2006 08:58
 Moin!


gibt es denn nun eigentlich eine funktionierende Version für exv2?
Partnerseiten
http://www.exv2-filecenter.de/modules/news_ml/

Vote für eXV2
php
Kontakt/Info
  Kontakt
  Impressum
  Link zu uns
  AGB
  Datenschutzhinweis
Downloads
  eXV² Core
  Core Sprachfiles
eXV² Filecenter
  Downloads
  Download Module
  eXV² Themes
  Multilanguage Module
  Sprachfiles eXV² Module
eXV² Support
  France