Hallo zusammen,
das ist jetzt die Lösung, die ich umgesetzt habe. Leider war dafür
doch eine Änderung an Applikation A nötig.
Applikation A schreibt jetzt für jeden User auch die Sessionid in die
Datenbanktabelle in der die gemeinsam genutzten Userdaten liegen.
Ich habe in meinem default Template folgenden Code eingefügt:
<?php
if (isset($_SESSION['user']['username']) == false){
echo '<meta http-equiv="refresh" content="0; URL=http://'.
$_SERVER['SERVER_NAME'].'/meineapp/users/singlesignon/">';
}
?>
D.h. wenn in meiner Cakephp Session kein User hinterlegt ist werde ich
zu meiner Funktion "singlesignon" umgeleitet, die natürlich im
users_controller liegt.
Dort habe ich eine Standardloginprozedur folgendermaßen abgewandelt:
function singlesignon()
{
//Don't show the error message if no data has been submitted.
$this->set('error', false);
// First, let's see if there are any users in the database
// with the username supplied by the user using the form:
$someone = $this->User->findBySessid($_COOKIE['PHPSESSID']);
// At this point, $someone is full of user data, or its empty.
//darf der User auch auf das meineAPP zugreifen?
...überprüfung....
wenn ok:
$zugriff=1;
// stimmt die Userid mit der Sessionid überein? Und und der
User
Zugriff auf das VMS-System?
if(!empty($someone['User']['password']) && $zugriff)
{
// Das heißt die Userid stimmt mit der Sessionid
überein und der
User hat Zugriff auf das meineAPP -System.
// We can now build some basic session information to
remember this
user as 'logged-in'.
$this->Session->write('User', $someone['User']);
$_SESSION['user'] = $someone['User'];
// Now that we have them stored in a session, forward
them on
// to a landing page for the application.
$this->redirect('/meinappteils/index');
}
// Else, they supplied incorrect data:
else
{
// Remember the $error var in the view? Let's set that
to true:
$this->set('error', true);
}
}
Die View ist recht spartanisch mit:
<?php
if ($error): ?>
<p>Login oder Paßwort sind dem System nicht bekannt.
Bitte melden Sie sich über das <a href="http://<?php echo
$_SERVER['SERVER_NAME']?>">Login</a> an.</p>
<?php endif; ?>
Hier wird also nichts weiter getan als im Falle eines Fehlers auf das
Login von Applikation A zuverweisen, sollte sich tatsächlich jemand
mal hierhinverlaufen und nicht vom redirect abgefangen werden. Im
Prinzip könnte man das auch leer lassen.
Ich hoffe das funktioniert jetzt zuverlässig.
Beste Grüße
Anja
--~--~---------~--~----~------------~-------~--~----~
Bitte bei Fragen immer auch die aktuell verwendete cakePHP Version angeben und
wenn möglich auch das verwendete Betriebssystem und die PHP Version. Danke.
Sie erhalten diese Nachricht, weil Sie Mitglied sind von Google Groups-Gruppe
"CakePHP-de für deutsche CakePHP Entwickler".
Für das Erstellen von Beiträgen in dieser Gruppe senden Sie eine E-Mail
an [email protected]
Um sich von dieser Gruppe abzumelden, senden Sie eine E-Mail an [EMAIL
PROTECTED]
Weitere Optionen finden Sie in dieser Gruppe unter
http://groups.google.com/group/cakephp-de?hl=de
-~----------~----~----~----~------~----~------~--~---