Rejestracja usera wraz z rejestracją z innego skryptu

Dyskusje odnośnie pomostów oraz integracji phpBB 3.0.x z systemami zarządzania treścią (CMS).
Awatar użytkownika
syngress
Posty: 18
Rejestracja: 13 czerwca 2011, 20:55

Rejestracja usera wraz z rejestracją z innego skryptu

Post autor: syngress » 13 czerwca 2011, 21:09

Witam wszystkich serdecznie.

Mam swoją stronę opartą w dużej części o PHP - chciałem wraz z rejestracja użytkownika przeprowadzić tą samą rejestrację na forum z tymi samymi danymi które wpisywane są z poziomu mojej strony.

Najważniejsze rzeczy na których najbardziej mi zależy to ten sam id, username, password, email - reszta w miarę możliwości po zalogowaniu do Panelu Użytkownika.

Co muszę dodać do swojego skryptu aby umożliwić automatyczną rejestrację również na forum phpBB.
Mówimy o wersji 3.0.8

Może jeszcze inaczej:
Jak zapisywane jest hasło w bazie danych phpBB 3.0.8 z MD5 ? Jakiś inny algorytm.
Zamieniając row[x] na $zmienne jestem w stanie na sztywno dopisywać do bazy danych wartości - problemem jak sądzę pozostaje hasło i jego szyfrowanie.

jaroslw
Zasłużony
Posty: 4524
Rejestracja: 10 grudnia 2005, 18:48
Kontakt:

Re: Rejestracja usera wraz z rejestracją z innego skryptu

Post autor: jaroslw » 13 czerwca 2011, 21:36

Polecam skorzystać z funkcji user_add(). Troszkę więcej na ten temat jeszcze tutaj. Do przechowywania haseł używana jest funkcja phpbb_hash().
Pobierz styl: we_universalwe_clearblue
Nowości i aktualizacje: FacebookGoogle+Twitter

Awatar użytkownika
syngress
Posty: 18
Rejestracja: 13 czerwca 2011, 20:55

Re: Rejestracja usera wraz z rejestracją z innego skryptu

Post autor: syngress » 13 czerwca 2011, 22:07

Ok dziękuje za info.
Jak ja to mam zrobić z poziomu mojego skryptu z rejestracją ?

Kod: Zaznacz cały

require_once ('ścieżka do pliku z funkcją ? ');

$user_row = array(
    'username'              => $_POST['username'],
    'user_password'         => phpbb_hash($_POST['password']),
i tak dalej .. .. .. . .. 
);
??

jaroslw
Zasłużony
Posty: 4524
Rejestracja: 10 grudnia 2005, 18:48
Kontakt:

Re: Rejestracja usera wraz z rejestracją z innego skryptu

Post autor: jaroslw » 13 czerwca 2011, 22:24

Gdzieś na początku poleciłbym skorzystać jeszcze z kodu integrującego sesje użytkowników. Po linii:

Kod: Zaznacz cały

include($phpbb_root_path . 'common.' . $phpEx);
dodaj jeszcze:

Kod: Zaznacz cały

include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
To powinno wystarczyć.
Pobierz styl: we_universalwe_clearblue
Nowości i aktualizacje: FacebookGoogle+Twitter

Awatar użytkownika
syngress
Posty: 18
Rejestracja: 13 czerwca 2011, 20:55

Re: Rejestracja usera wraz z rejestracją z innego skryptu

Post autor: syngress » 14 czerwca 2011, 11:46

Mam to zrobione w następujący sposób:

index.php odpowiada w moim przypadku za wyświetlenie formularza rejestracyjnego.
Do index.php dołączam plik funkcjarejestracji.inc
Na samej górze pliku index.php dopisuje:

Kod: Zaznacz cały

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

// Start session management
$user->session_begin();
$auth->acl($user->data);
$user->setup();
?>
w pliku funkcjarejestracji.inc umieszczam (w miejscu do którego skrypt dotrze wyłącznie wtedy kiedy rejestracja na mojej stronie przebiegnie prawidłowo) treść:

Kod: Zaznacz cały

$user_row = array(
    'username'              => $_POST['user_name'],
    'user_password'         => phpbb_hash($_POST['password']),
    'user_email'            => $_POST['email'],
    'group_id'              => 2, // by default, the REGISTERED user group is id 2
    'user_timezone'         => (float) $data['tz'],
    'user_lang'             => $data['lang'],
    'user_type'             => USER_NORMAL,
    'user_ip'               => $user->ip,
    'user_regdate'          => time(),
);

// Register user...
$user_id = user_add($user_row);
if (!$user_id) {
          $feedback =  die(mysql_error());
          return $feedback;
          exit();
        }
I wszystko działa ! ale .....

Zapisuje dane w phpbb_users - nie mogę się zalogować na forum. Otrzymuje komunikat taki sam jak ten przy źle wpisanym username lub błędnie podanym haśle.

Oczywiście mogę zresetować hasło - forum wyśle mi link aktywacyjny oraz nowe hasło i wszystko działa.
Tak więc na 100% problem jest z dodaniem hasła do bazy danych :/

Awatar użytkownika
Pico
Posty: 109
Rejestracja: 21 listopada 2010, 12:12

Re: Rejestracja usera wraz z rejestracją z innego skryptu

Post autor: Pico » 14 czerwca 2011, 12:28

Brakuje Ci odwołania do funkcji phpbb_hash zawartej w pliku function.php

include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
za tym dodaj
include($phpbb_root_path . 'includes/function.' . $phpEx);

i wszystko powinno działać ;)

EDIT:
hmm, plik common.php zawiera odwołanie do functions.php, ale warto spróbować na sztywno :)

Awatar użytkownika
syngress
Posty: 18
Rejestracja: 13 czerwca 2011, 20:55

Re: Rejestracja usera wraz z rejestracją z innego skryptu

Post autor: syngress » 14 czerwca 2011, 12:55

OK DZIAŁA !!! :D

Pico - mój błąd, zrobiłem literówkę w:

Kod: Zaznacz cały

'user_password'         => phpbb_hash($_POST['password']),
dlatego sprawiał problemy. Teraz wszystko ślicznie działa. A ja wam ŚLICZNIE DZIĘKUJE !!!!

jaroslw
Zasłużony
Posty: 4524
Rejestracja: 10 grudnia 2005, 18:48
Kontakt:

Re: Rejestracja usera wraz z rejestracją z innego skryptu

Post autor: jaroslw » 14 czerwca 2011, 14:02

To ja jeszcze zwrócę uwagę na bezpieczeństwo takiego rozwiązania. Zapisywanie danych bezpośrednio ze zmiennych $_POST i $_GET to bardzo zły pomysł (SQL injection). Warto zamiast nich zastosować funkcję request_var().
Pobierz styl: we_universalwe_clearblue
Nowości i aktualizacje: FacebookGoogle+Twitter

Awatar użytkownika
syngress
Posty: 18
Rejestracja: 13 czerwca 2011, 20:55

Re: Rejestracja usera wraz z rejestracją z innego skryptu

Post autor: syngress » 14 czerwca 2011, 14:16

weeb pisze:To ja jeszcze zwrócę uwagę na bezpieczeństwo takiego rozwiązania. Zapisywanie danych bezpośrednio ze zmiennych $_POST i $_GET to bardzo zły pomysł (SQL injection). Warto zamiast nich zastosować funkcję request_var().
Jeśli masz funkcje która sprawdza co przechodzi przez $_POST i $_GET - SQL injection nie powinno być już takie straszne. Z drugiej strony SQL injection jest bardzo wrażliwe - wystarczy odizolować kilka znaków - i już nic nie jesteś w stanie wstrzyknąć ;)

jaroslw
Zasłużony
Posty: 4524
Rejestracja: 10 grudnia 2005, 18:48
Kontakt:

Re: Rejestracja usera wraz z rejestracją z innego skryptu

Post autor: jaroslw » 14 czerwca 2011, 14:22

Zgadza się. Ktoś może jednak skorzystać z Twojego powyższego kodu i nie zatroszczyć się o filtrowanie ;) Na to chciałem zwrócić uwagę. Po co później pisać własne funkcje, skoro można skorzystać z gotowych.
Pobierz styl: we_universalwe_clearblue
Nowości i aktualizacje: FacebookGoogle+Twitter

Awatar użytkownika
syngress
Posty: 18
Rejestracja: 13 czerwca 2011, 20:55

Re: Rejestracja usera wraz z rejestracją z innego skryptu

Post autor: syngress » 14 czerwca 2011, 14:35

Masz rację. Cały kod który odpowiedzialny jest za modyfikacje bazy danych powinien być zabezpieczony.
Można to zrobić na kilka sposobów, oto jeden bardziej prosty:

Kod: Zaznacz cały

if (accountvalidator($_POST['xxx']) || strlen($_POST['xxx'] >= 6 || i tak dalej .. )) {

... cały kod grzebiący w bazie danych ..  }

function accountvalidator() {

// Musi zawierac dozwolony znak
if (strspn($_POST['xxx'],"aąbcćdeęfghijklłmnopqrsśtuóvwxyzżźAĄBCĆDEĘFGHIJKLŁMNOPQRSŚTUÓVWXYZŻŹ0123456789-_") != strlen($_POST['xxx'])) {
return false;
}
// Min i Max dlugosc
if (strlen($_POST['xxx']) < 6) {
return false;
}
if (strlen($_POST['xxx']) > 25) {
return false;
}
// Nazwy OUT
if (eregi("^((root)|(bin)|(daemon)|(adm)|(lp)|(sync)|(shutdown)|(halt)|(mail)|(news)|(uucp)|(operator)|(games)|(mysql)|(httpd)|(nobody)|(dummy)|(www)|(cvs)|(shell)|(ftp)|(irc)|(debian)|(ns)|(download))$", $_POST['xxx'])) {
return false;
}
}
i tak dalej. Analogicznie dla GET ..

Dopisano 15.06.2011
Przy

Kod: Zaznacz cały

$query
warto zastosować funkcje

Kod: Zaznacz cały

sprintf()
Do neutralizacji ciągów znaków funkcja:

Kod: Zaznacz cały

mysql_escape_string()

Awatar użytkownika
syngress
Posty: 18
Rejestracja: 13 czerwca 2011, 20:55

Re: Rejestracja usera wraz z rejestracją z innego skryptu

Post autor: syngress » 23 czerwca 2011, 22:38

Nie śmiecąc, wykorzystam ten temat jako kontynuacje - chciałem zapytać o jeszcze jedną kwestie.
Przy automatycznej rejestracji Użytkownika z mojej strony, w tabeli "phpbb_users" tworzy się nowy rekord.

Ponieważ często testuje skrypt - kasuje rekordy zaraz po rejestracji, ale widzę że na stronie forum w statystykach wyświetlana jest suma zarejestrowanych Użytkowników.

Byłem przekonany że skrypt phpbb zlicza user'ów po zapisanych rekordach w tabeli "phpbb_users".
Jak widzę zlicza i przechowuje te dane osobno.

Jak mogę uregulować listę zarejestrowanych Użytkowników na forum ?
Co muszę kasować oprócz rekordu z tabeli "phpbb_users" kasując Użytkownika z poziomu phpmyadmin ?

Awatar użytkownika
Pico
Posty: 109
Rejestracja: 21 listopada 2010, 12:12

Re: Rejestracja usera wraz z rejestracją z innego skryptu

Post autor: Pico » 24 czerwca 2011, 06:55

hmm.. zerknij do pliku function_user.php i znajdź funkcję user_delete. Zobacz jakie tabele czyści z rekordów itd. ;)

Oto Ci chyba chodzi

Kod: Zaznacz cały

	// Decrement number of users if this user is active
	if ($user_row['user_type'] != USER_INACTIVE && $user_row['user_type'] != USER_IGNORE)
	{
		set_config_count('num_users', -1, true);
	}

Awatar użytkownika
syngress
Posty: 18
Rejestracja: 13 czerwca 2011, 20:55

Re: Rejestracja usera wraz z rejestracją z innego skryptu

Post autor: syngress » 24 czerwca 2011, 17:54

Chodzi mi o to:

Obrazek

Pomimo wykasowania użytkownika z bazy danych, statystyki pozostają niezmienione.
Już pędzę spojrzeć do function_user.

Awatar użytkownika
daroPL
Zasłużony
Posty: 4564
Rejestracja: 24 czerwca 2005, 13:36
Lokalizacja: Poznań
Kontakt:

Re: Rejestracja usera wraz z rejestracją z innego skryptu

Post autor: daroPL » 24 czerwca 2011, 18:52

Trzeba zsynchronizować statystyki.
PA -> Główna -> Synchronizacja i resetowanie statystyk -> Zsynchronizuj statystyki.

Zablokowany