Seite 1 von 1

Einbau eines externen Logins - mal wieder

Verfasst: 25.10.2009 15:45
von d-nono
Hallo Communitiy,

ich weiß das viele diesen Beitrag mit dem Gedanken "schon wieder!!" öffnen werden und danke euch dafür, das ihr euch dem trotzdem annehmt.
Ich habe schon "einige" Beiträge zu diesem Thema gelesen und auch einiges umgesetzt, dabei ist folgendes rausgekommen:

Meine phpBB-version ist 3.0.4.
Ich habe eine externe Registrierung, die auch schon wunderbar funktioniert.
Nutzern wird beim Aufruf der Seite mit dem im iframe eingebetteten Forum eine Zeile in der MySQL-Tabelle "phpbbForum_sessions" erstellt.

Problem:
Trotz der Zeile in "phpbbForum_sessions" gilt der Benutzer danach im Forum nicht als eingeloggt.


Was ich will:
Ich habe in eine Site, auf der schon ein Benutzermanagement existiert, das phpBB-Forum per iframe eingebunden.
Damit Nutzer sich nicht zweimal registrieren müssen und sich nicht immer zweimal einloggen müssen, soll dies automatisch gehen.

Mithilfe dieser Funktionen werden Nutzer registriert:

Code: Alles auswählen

<?php
    define('IN_PHPBB', true);
function createSqlDataArray($username, $password, $email)
   {
      $username_clean = strtolower($username);
      if ($username_clean == FALSE)
      	echo 'FALSE';
      $sql_ary = array(
            'username'         => $username,
            'user_regdate'      => time(),
            'username_clean'   => $username_clean,
            'user_password'      => $password,
            'user_passchg'      => time(),
            'user_email'      => strtolower($email),
            'user_email_hash'   => crc32(strtolower($email)) . strlen($email),
            'group_id'         => 2,
            'user_dateformat'   => 'D M d, Y g:i a',
            'user_lang'         => 'de_x_sie',
            'user_style'      => 1,
            'user_form_salt'   => unique_id_own($username, $password, $email),
         );      
         return $sql_ary;
   }   
   
function unique_id_own()
{
	substr(md5($username.time()),4 ,16);
}

function createSQL($sql_ary)
   {
      $sqlString='INSERT INTO  `usr_web802_2`.`phpbbForum_users`
      (
         `group_id`,
         `user_ip`,
         `user_regdate`,
         `username`,
         `username_clean`,
         `user_password`,
         `user_passchg`,
         `user_email`,
         `user_email_hash`,
         `user_lang`,
         `user_style`,
         `user_dateformat`,
         `user_form_salt`
      )
      
      VALUES(
      '.$sql_ary['group_id'].',
      "127.0.0.1",
      "'.$sql_ary['user_regdate'].'",
      "'.$sql_ary['username'].'",
      "'.$sql_ary['username_clean'].'",
      "'.$sql_ary['user_password'].'",
      "'.$sql_ary['user_passchg'].'",
      "'.$sql_ary['user_email'].'",
      "'.$sql_ary['user_email_hash'].'",
      "'.$sql_ary['user_lang'].'",
      "'.$sql_ary['user_style'].'",
      "'.$sql_ary['user_dateformat'].'",
      "'.$sql_ary['user_form_salt'].'"   
      );';
      
      return $sqlString;
}

function getGroupSQL($userId)
{
      return `usr_web802_2`.'INSERT INTO phpbbForum_user_group (group_id, user_id, group_leader, user_pending) VALUES(2, '.$userId.',0,0);';   
}
Und so sollen Nutzer eingeloggt werden:
(Die Variablen $loginName und $pw wurden vorher definiert)

Code: Alles auswählen

define('IN_PHPBB', true);
    $phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : '../forum/phpBB3/';
    $phpEx = substr(strrchr(__FILE__, '.'), 1);
    require('../forum/phpBB3/common.php');

    // Start session management
    $user->session_begin();
    $auth->acl($user->data);
    $user->setup();
    
    // Einloggen
    $password	= $pw;
    $autologin  = true;
    $viewonline = 1;
    $success = ($auth->login($loginName, $password, $autologin, $viewonline));
Eine Zeile in der Session-Tabelle sieht z.B. so aus:
session_id : 29bde85f47501801089d13cbcd80b258
session_user_id : 1
session_forum_id : 0
session_last_visit : 1256310510
session_start : 1256310510
session_time : 1256310510
session_ip : 127.0.0.1
session_browser : Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9.0.4) G...
session_forwarded_for :
session_page : index.php
session_viewonline : 1
session_autologin : 0
session_admin : 0

Ich hoffe ich habe nichts vergessen ;)
Vielen Dank schonmal im Voraus,

d-nono


EDIT: Tut mit leid das ich erst im falschen Forum war. Habe noch etwas bemerkt: phpBB zeigt an, dass ein registrierter Nutzer online ist, nachdem ich mich angemeldet habe. Aber die Funktionen kann ich trotzdem nicht nutzen, und es steht immer noch "Anmelden" / "Registrieren" da.

Re: Einbau eines externen Logins - mal wieder

Verfasst: 29.10.2009 11:07
von d-nono
Kann es sein, dass es nicht reicht, nach dem vermeintlichen Login einfach per php- header()-Weiterleitung auf das Forum zuzugreifen? Muss ich die Oberfläche vllt. noch irgendwie initialisieren?

Re: Einbau eines externen Logins - mal wieder

Verfasst: 29.10.2009 13:17
von d-nono
Habe das Problem jetzt folgendermaßen umgangen:

Habe die Funktion:
PHPBB Root Path / includes / functions.php

...so umgeschrieben, dass das Passwort im Forum nun dasselbe ist wie das der Site. Über dem Forum-<iframe> steht jetzt:
Ihr könnt euch mit eurem Benutzernamen und eurem Passwort in das Forum einloggen!

Ist natürlich nicht das Gelbe vom EI, aber wenigstens eine Lösung. Wenn jemand trotzdem eine Ahnung hat wie das alles funktionieren könnte wäre das super!

Re: Einbau eines externen Logins - mal wieder

Verfasst: 29.10.2009 16:15
von schumiel
Über Google findet man zahlreiche Lösungen. Ich bekomme es damit auch nicht hin. Lediglich wird der Benutzer in "Wer ist online?" angeziegt, aber automatisch eingeloggt wird man nicht. :(

Ich bin ebenso nach wie vor über jede Lösung dankbar.

Re: Einbau eines externen Logins - mal wieder

Verfasst: 29.10.2009 18:03
von Dr.Death
Hallo,

das hier schon getestet ?

[Snippet] Externer Login / Logout für phpBB3