Strona 1 z 3

Modyfikacja logowania i rejestracji

: 21 czerwca 2008, 14:26
autor: Michał
1. Integruję stronę z forum i chciałbym, aby po zalogowaniu nie pokazywała się strona 'Zostałeś poprawnie zalogowany. (...) wróć do poprzedniej strony', tylko od razu następowało przekierowanie do strony z $_POST['redirect'].
Domyślam się, że należy coś tu zmodyfikować (mi jakoś nie wyszło)

Kod: Zaznacz cały

function login_box($redirect = '', $l_explain = '', $l_success = '', $admin = false, $s_display = true)
{
	global $db, $user, $template, $auth, $phpEx, $phpbb_root_path, $config;

	$err = '';

	// Make sure user->setup() has been called
	if (empty($user->lang))
	{
		$user->setup();
	}

	// Print out error if user tries to authenticate as an administrator without having the privileges...
	if ($admin && !$auth->acl_get('a_'))
	{
		// Not authd
		// anonymous/inactive users are never able to go to the ACP even if they have the relevant permissions
		if ($user->data['is_registered'])
		{
			add_log('admin', 'LOG_ADMIN_AUTH_FAIL');
		}
		trigger_error('NO_AUTH_ADMIN');
	}

	if (isset($_POST['login']))
	{
		// Get credential
		if ($admin)
		{
			$credential = request_var('credential', '');

			if (strspn($credential, 'abcdef0123456789') !== strlen($credential) || strlen($credential) != 32)
			{
				if ($user->data['is_registered'])
				{
					add_log('admin', 'LOG_ADMIN_AUTH_FAIL');
				}
				trigger_error('NO_AUTH_ADMIN');
			}

			$password	= request_var('password_' . $credential, '', true);
		}
		else
		{
			$password	= request_var('password', '', true);
		}

		$username	= request_var('username', '', true);
		$autologin	= (!empty($_POST['autologin'])) ? true : false;
		$viewonline = (!empty($_POST['viewonline'])) ? 0 : 1;
		$admin 		= ($admin) ? 1 : 0;
		$viewonline = ($admin) ? $user->data['session_viewonline'] : $viewonline;

		// Check if the supplied username is equal to the one stored within the database if re-authenticating
		if ($admin && utf8_clean_string($username) != utf8_clean_string($user->data['username']))
		{
			// We log the attempt to use a different username...
			add_log('admin', 'LOG_ADMIN_AUTH_FAIL');
			trigger_error('NO_AUTH_ADMIN_USER_DIFFER');
		}

		// If authentication is successful we redirect user to previous page
		$result = $auth->login($username, $password, $autologin, $viewonline, $admin);

		// If admin authentication and login, we will log if it was a success or not...
		// We also break the operation on the first non-success login - it could be argued that the user already knows
		if ($admin)
		{
			if ($result['status'] == LOGIN_SUCCESS)
			{
				add_log('admin', 'LOG_ADMIN_AUTH_SUCCESS');
			}
			else
			{
				// Only log the failed attempt if a real user tried to.
				// anonymous/inactive users are never able to go to the ACP even if they have the relevant permissions
				if ($user->data['is_registered'])
				{
					add_log('admin', 'LOG_ADMIN_AUTH_FAIL');
				}
			}
		}

		// The result parameter is always an array, holding the relevant information...
		if ($result['status'] == LOGIN_SUCCESS)
		{
			$redirect = request_var('redirect', "{$phpbb_root_path}index.$phpEx");
			$message = ($l_success) ? $l_success : $user->lang['LOGIN_REDIRECT'];
			$l_redirect = ($admin) ? $user->lang['PROCEED_TO_ACP'] : (($redirect === "{$phpbb_root_path}index.$phpEx" || $redirect === "index.$phpEx") ? $user->lang['RETURN_INDEX'] : $user->lang['RETURN_PAGE']);

			// append/replace SID (may change during the session for AOL users)
			$redirect = reapply_sid($redirect);

			// Special case... the user is effectively banned, but we allow founders to login
			if (defined('IN_CHECK_BAN') && $result['user_row']['user_type'] != USER_FOUNDER)
			{
				return;
			}
			meta_refresh(3, $redirect);

			trigger_error($message . '<br /><br />' . sprintf($l_redirect, '<a href="' . $redirect . '">', '</a>'));
		}

		// Something failed, determine what...
		if ($result['status'] == LOGIN_BREAK)
		{
			trigger_error($result['error_msg'], E_USER_ERROR);
		}

		// Special cases... determine
		switch ($result['status'])
		{
			case LOGIN_ERROR_ATTEMPTS:

				// Show confirm image
				$sql = 'DELETE FROM ' . CONFIRM_TABLE . "
					WHERE session_id = '" . $db->sql_escape($user->session_id) . "'
						AND confirm_type = " . CONFIRM_LOGIN;
				$db->sql_query($sql);

				// Generate code
				$code = gen_rand_string(mt_rand(5, 8));
				$confirm_id = md5(unique_id($user->ip));
				$seed = hexdec(substr(unique_id(), 4, 10));

				// compute $seed % 0x7fffffff
				$seed -= 0x7fffffff * floor($seed / 0x7fffffff);

				$sql = 'INSERT INTO ' . CONFIRM_TABLE . ' ' . $db->sql_build_array('INSERT', array(
					'confirm_id'	=> (string) $confirm_id,
					'session_id'	=> (string) $user->session_id,
					'confirm_type'	=> (int) CONFIRM_LOGIN,
					'code'			=> (string) $code,
					'seed'			=> (int) $seed)
				);
				$db->sql_query($sql);

				$template->assign_vars(array(
					'S_CONFIRM_CODE'			=> true,
					'CONFIRM_ID'				=> $confirm_id,
					'CONFIRM_IMAGE'				=> '<img src="' . append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=confirm&id=' . $confirm_id . '&type=' . CONFIRM_LOGIN) . '" alt="" title="" />',
					'L_LOGIN_CONFIRM_EXPLAIN'	=> sprintf($user->lang['LOGIN_CONFIRM_EXPLAIN'], '<a href="mailto:' . htmlspecialchars($config['board_contact']) . '">', '</a>'),
				));

				$err = $user->lang[$result['error_msg']];

			break;

			case LOGIN_ERROR_PASSWORD_CONVERT:
				$err = sprintf(
					$user->lang[$result['error_msg']],
					($config['email_enable']) ? '<a href="' . append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=sendpassword') . '">' : '',
					($config['email_enable']) ? '</a>' : '',
					($config['board_contact']) ? '<a href="mailto:' . htmlspecialchars($config['board_contact']) . '">' : '',
					($config['board_contact']) ? '</a>' : ''
				);
			break;

			// Username, password, etc...
			default:
				$err = $user->lang[$result['error_msg']];

				// Assign admin contact to some error messages
				if ($result['error_msg'] == 'LOGIN_ERROR_USERNAME' || $result['error_msg'] == 'LOGIN_ERROR_PASSWORD')
				{
					$err = (!$config['board_contact']) ? sprintf($user->lang[$result['error_msg']], '', '') : sprintf($user->lang[$result['error_msg']], '<a href="mailto:' . htmlspecialchars($config['board_contact']) . '">', '</a>');
				}
				
			break;
		}
	}

	if (!$redirect)
	{
		// We just use what the session code determined...
		// If we are not within the admin directory we use the page dir...
		$redirect = '';

		if (!$admin)
		{
			$redirect .= ($user->page['page_dir']) ? $user->page['page_dir'] . '/' : '';
		}

		$redirect .= $user->page['page_name'] . (($user->page['query_string']) ? '?' . htmlspecialchars($user->page['query_string']) : '');
	}

	// Assign credential for username/password pair
	$credential = ($admin) ? md5(unique_id()) : false;

	$s_hidden_fields = array(
		'redirect'	=> $redirect,
		'sid'		=> $user->session_id,
	);

	if ($admin)
	{
		$s_hidden_fields['credential'] = $credential;
	}

	$s_hidden_fields = build_hidden_fields($s_hidden_fields);

	$template->assign_vars(array(
		'LOGIN_ERROR'		=> $err,
		'LOGIN_EXPLAIN'		=> $l_explain,

		'U_SEND_PASSWORD' 		=> ($config['email_enable']) ? append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=sendpassword') : '',
		'U_RESEND_ACTIVATION'	=> ($config['require_activation'] != USER_ACTIVATION_NONE && $config['email_enable']) ? append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=resend_act') : '',
		'U_TERMS_USE'			=> append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=terms'),
		'U_PRIVACY'				=> append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=privacy'),

		'S_DISPLAY_FULL_LOGIN'	=> ($s_display) ? true : false,
		'S_LOGIN_ACTION'		=> (!$admin) ? append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=login') : append_sid("index.$phpEx", false, true, $user->session_id), // Needs to stay index.$phpEx because we are within the admin directory
		'S_HIDDEN_FIELDS' 		=> $s_hidden_fields,

		'S_ADMIN_AUTH'			=> $admin,
		'USERNAME'				=> ($admin) ? $user->data['username'] : '',

		'USERNAME_CREDENTIAL'	=> 'username',
		'PASSWORD_CREDENTIAL'	=> ($admin) ? 'password_' . $credential : 'password',
	));
	page_header($user->lang['LOGIN']);

	$template->set_filenames(array(
		'body' => 'login_body.html')
	);
	make_jumpbox(append_sid("{$phpbb_root_path}viewforum.$phpEx"));

	page_footer();

}
2. Podobnie z rejestracją, chciałbym aby po zarejestrowaniu (formularz sobie zbuduję) następowało przekierowanie na poprzednią stronę, a nie forum.
Tu w ogóle nie mam koncepcji.

Re: Modyfikacja logowania i rejestracji

: 21 czerwca 2008, 16:09
autor: mateusz
ad 1.

Kod: Zaznacz cały

meta_refresh(3, $redirect);
zmień 3 na 0 i wtedy będzie szybciej przelatywało. aczkolwiek zbytnio się nie wgłębiałem w plik :D

ad 2.
tutaj trzeba przemyśleć bo standardowo strona wcześniejsza to strona z regulaminem i zwykłe wstecz nic nie da. czyli trzeba cofnąć się tak jak by trzy (formularz i pytanie o liczbę lat) razy wstecz, albo właśnie wybrać dokładnie stronę gdzie sie cofamy.


nie mam czasu sie nad tym zastanawiać. ewentualnie później pomysle.
podpowiem tylko ze odpowiedni link jest w pliku ucp_register.php linijka:

Kod: Zaznacz cały

$message = $message . '<br /><br />' . sprintf($user->lang['RETURN_INDEX'], '<a href="' . append_sid("{$phpbb_root_path}index.$phpEx") . '">', '</a>');
najprościej odwołać się do konkretnej strony, albo cos na kształt polecenia redirect wstawić w rejestrację. przy linku do rejestracji w pasu adresu dokładac gdzie ma wrócic a potem tylko $_GET['adres redirect'] i w podanym miejscu to wsadzić :D

Re: Modyfikacja logowania i rejestracji

: 21 czerwca 2008, 16:57
autor: Kiziea
Spytaj się tego pana on ma phpbb3 sprzężone z serwisem http://www.f1wm.pl/redakcja.php?id=maraz

Re: Modyfikacja logowania i rejestracji

: 22 czerwca 2008, 14:46
autor: Michał
Co do 0 w meta doszedłem, ale wolałbym, aby było to bezpośrednie przekierowanie.
Z rejestracją dalej nie bardzo rozumiem.

Damian, jak ten Pan ma sprzężone forum z serwisem? Bo widzę, jakby forum było oddzielne zupełnie.

Re: Modyfikacja logowania i rejestracji

: 22 czerwca 2008, 14:50
autor: Kiziea
Rejestrujesz się na forum i dzięki temu zyskujesz dostęp do serwisu czyli pisanie komentarzy itp :D

Re: Modyfikacja logowania i rejestracji

: 22 czerwca 2008, 15:02
autor: Michał
Nie zrozumiałeś moich pytań, takie coś to ja potrafię zrobić ;)
Chodzi mi o praktyczne pominięcie phpBB, zeby było 'ukryte'. (pierwszy post)

Re: Modyfikacja logowania i rejestracji

: 22 czerwca 2008, 15:12
autor: mateusz
a dlaczego nie możesz zrobić to najprościej czyli przez redirect ?? (w porywach przez ukryte pole formularza jeśli nie chcesz aby w pasku adresu coś było ??)

Re: Modyfikacja logowania i rejestracji

: 22 czerwca 2008, 16:21
autor: Michał
Chodzi Ci o ukryte pole o nazwie redirect, czy co? Bo nie do końca zrozumiałem.

Re: Modyfikacja logowania i rejestracji

: 22 czerwca 2008, 17:01
autor: mateusz
nie. mówiąc o redirect mam na myśli zwykłe przekazanie adresu w zmiennej GET
nazwa dowolna

również ukryte pole w formularzu może mieć dowolną nazwę.

Re: Modyfikacja logowania i rejestracji

: 22 czerwca 2008, 18:16
autor: Michał
To powiedz, w którym miejscu to umieścić - masz browca u mnie :D
Próbowałem tak, ale działy się dziwne rzeczy, typu, że admin nie był adminem (nie można się było zalogować do panelu).

Re: Modyfikacja logowania i rejestracji

: 24 czerwca 2008, 21:07
autor: Michał
Mam dodatkowe pytania związane z formularzem rejestracji.
Czym wypełnić te pola?

Kod: Zaznacz cały

<input type="hidden" name="agreed" value="true" />
<input type="hidden" name="change_lang" value="0" />
<input type="hidden" name="confirm_id" value="f69906b5d15af417194552da0cd13bd5" />
<input type="reset" value="Wyczyść" name="reset" class="button2" />&nbsp;
<input type="submit" name="submit" id ="submit" value="Wyślij" class="button1" />
<input type="hidden" name="creation_time" value="1214309717" />
<input type="hidden" name="form_token" value="17e61388a2fcac88fdc22ab6f1ae1508296d96e9" />
I jak stworzyć obrazek do przepisania kodu (captcha), pewnie jest jakaś funkcja do tego?

pzdr

Re: Modyfikacja logowania i rejestracji

: 25 czerwca 2008, 11:23
autor: Michał
No to doszedłem do logowania, została rejestracja, jeśli ktoś by potrafił odpowiedzieć na wcześniejsze pytania :)
Zmodyfikowałem 2301 linię w includes/functions.php:

Kod: Zaznacz cały

//modyfikacja przekierowania
if ($_POST['redirect_home'] == 1) {
  header('Location: '.$_POST['redirect']);
  exit;
} else {
  trigger_error($message . '<br /><br />' . sprintf($l_redirect, '<a href="' . $redirect . '">', '</a>'));
}
W formularzu logowania dodałem pole redirect_home z wartością jeden i gra gitara.
Oryginalnie w linii 2301 znajduje się to, co przeniosłem do 6 (6 linia w tym fragmencie oczywiście).

Re: Modyfikacja logowania i rejestracji

: 25 czerwca 2008, 13:54
autor: mateusz
rejestracja na podobnej zasadzie jak to zrobiłeś z logowaniem.
kod który podawałem wcześniej też robisz w if tylko w formularzu przekazujesz zmienne.
dużo zrobiłeś sam to nie chciałbym teraz psuć ci pracy dając gotowca :D

masz ifa i podałem ci miejsce gdzie go wsadzić (post wcześniej)

tylko teraz rozgryź przekazywanie tej zmiennej (mozesz na poczatku przy pomocy GET abyś widizałefekt a potem tylko przerobisz GET na POST :D)

Re: Modyfikacja logowania i rejestracji

: 27 czerwca 2008, 12:39
autor: Michał
Wysyłam formularz pod adres ucp.php?mode=register i pokazuje się regulamin, a w formularzu mam ukryte pole agreed=true. Jak to obejść?

Re: Modyfikacja logowania i rejestracji

: 27 czerwca 2008, 20:02
autor: mateusz
nie rozumiem. co chcesz obchodzić ??