Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

priscylla

Login não funciona no IE, mas funciona no Mozilla

Recommended Posts

Ola gente, sou nova aqui no fórum... e não sei muito de php.

Estou precisando muito de ajuda... Estou desenvolvendo uma intranet em joomla, (sei que aqui são problemas com php e o meu é)

Fiz algumas modificações em um componente do joomla, o com_user no controller.php... o objetivo disso é fazer com que o sistema logue com o nome do usuário que está logado no computador, o código está funcionando no mozilla e no chrome, mas não no IE!

 

Alguém sabe dizer se existe alguma parte do código php que é incompatível no IE?!?!

Segue meu código...

p.s.: Essa função é chamada por um form em um submit!!

 

function login()
{
// Check for request forgeries
JRequest::checkToken('request') or jexit( 'Invalid Token' );

//______________Inicio da modificação_____________________
$headers = apache_request_headers();

if (!isset($headers['Authorization'])){
header('HTTP/1.1 401 Unauthorized');
header('WWW-Authenticate: NTLM');
echo " 1";
exit;
}

$auth = $headers['Authorization'];
echo " 2";

if (substr($auth,0,5) == 'NTLM ') {
$msg = base64_decode(substr($auth, 5));
echo " 3";
if (substr($msg, 0, 8) != "NTLMSSP\x00"){
LogError('Header not recognised');
echo " 4";
die;
}

if ($msg[8] == "\x01") {
$msg2 = "NTLMSSP\x00\x02"."\x00\x00\x00\x00".
"\x00\x00\x00\x00".
"\x01\x02\x81\x01".
"\x00\x00\x00\x00\x00\x00\x00\x00".
"\x00\x00\x00\x00\x00\x00\x00\x00".
"\x00\x00\x00\x00\x30\x00\x00\x00";

echo " 5";
header('HTTP/1.1 401 Unauthorized');
header('WWW-Authenticate: NTLM '.trim(base64_encode($msg2)));

echo " 6";
exit;
}
else if ($msg[8] == "\x03") {
echo " 7";
function get_msg_str($msg, $start, $unicode = true) {
$len = (ord($msg[$start+1]) * 256) + ord($msg[$start]);
$off = (ord($msg[$start+5]) * 256) + ord($msg[$start+4]);
echo " 8";

if ($unicode)
return str_replace("\0", '', substr($msg, $off, $len));
else
return substr($msg, $off, $len);
}
echo " 9";
$user = get_msg_str($msg, 36);//retorna o login do usuário no computador
//$domain = get_msg_str($msg, 28);
//$workstation = get_msg_str($msg, 44);
}
}

//_______________Fim da parte modificada_____________________

global $mainframe;

if ($return = JRequest::getVar('return', '', 'method', 'base64')) {
$return = base64_decode($return);
if (!JURI::isInternal($return)) {
$return = '';
}
}

$options = array();
$options['remember'] = JRequest::getBool('remember', false);
$options['return'] = $return;

$credentials = array();
//AQUI TBM DEVE SER MODIFICADO DESTA FORMA
$credentials['username'] = $user;
$credentials['password'] = "123456";

//preform the login action
$error = $mainframe->login($credentials, $options);

if(!JError::isError($error))
{
// Redirect if the return url is not registration or login
if ( ! $return ) {
$return	= 'index.php?option=com_user';
}

$mainframe->redirect( $return );
}
else
{
// Facilitate third party login forms
if ( ! $return ) {
$return	= 'index.php?option=com_user&view=login';
}

// Redirect to a login form
$mainframe->redirect( $return );
}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não tem não Cassiano...

 

Olha o código da página que chama a função...

<?php // no direct access
defined('_JEXEC') or die('Restricted access'); ?>
<?php if($type == 'logout') : ?>
<form action="index.php" method="post" name="login" id="form-login">
<?php if ($params->get('greeting')) : ?>
	<div>
	<?php if ($params->get('name')) : {
		echo JText::sprintf( 'HINAME', $user->get('name') );
	} else : {
		echo JText::sprintf( 'HINAME', $user->get('username') );
	} endif; ?>
	</div>
<?php endif; ?>
	<div align="center">
		<input type="submit" name="Submit" class="button" value="<?php echo JText::_( 'BUTTON_LOGOUT'); ?>" />
	</div>

	<input type="hidden" name="option" value="com_user" />
	<input type="hidden" name="task" value="logout" />
	<input type="hidden" name="return" value="<?php echo $return; ?>" />
</form>
<?php else : ?>
<?php if(JPluginHelper::isEnabled('authentication', 'openid')) :
		$lang->load( 'plg_authentication_openid', JPATH_ADMINISTRATOR );
		$langScript = 	'var JLanguage = {};'.
						' JLanguage.WHAT_IS_OPENID = \''.JText::_( 'WHAT_IS_OPENID' ).'\';'.
						' JLanguage.LOGIN_WITH_OPENID = \''.JText::_( 'LOGIN_WITH_OPENID' ).'\';'.
						' JLanguage.NORMAL_LOGIN = \''.JText::_( 'NORMAL_LOGIN' ).'\';'.
						' var modlogin = 1;';
		$document = &JFactory::getDocument();
		$document->addScriptDeclaration( $langScript );
		JHTML::_('script', 'openid.js');
		echo JRoute::_( 'index.php', true, $params->get('usesecure'));
		echo JHTML::_( 'form.token' );
endif; ?>
<!--<form action="<?php echo JRoute::_( 'index.php', true, $params->get('usesecure')); ?>" method="post" name="login" id="form-login" >
	<?php echo $params->get('pretext'); ?>

	<fieldset class="input">
	<p id="form-login-username">
		<label for="modlgn_username"><?php echo JText::_('Username') ?></label><br />
		<input id="modlgn_username" type="text" name="username" class="inputbox" alt="username" size="18"/>
	</p>
	<p id="form-login-password">
		<label for="modlgn_passwd"><?php echo JText::_('Password') ?></label><br />
		<input id="modlgn_passwd" type="password" name="passwd" class="inputbox" size="18" alt="password" value="123456" />
	</p>
	<?php if(JPluginHelper::isEnabled('system', 'remember')) : ?>
	<p id="form-login-remember">
		<label for="modlgn_remember"><?php echo JText::_('Remember me') ?></label>
		<input id="modlgn_remember" type="checkbox" name="remember" class="inputbox" value="yes" alt="Remember Me" />
	</p>
	<?php endif; ?>
	<input type="submit" name="Submit" class="button" value="<?php echo JText::_('LOGIN') ?>" />
	</fieldset>
	<!--<ul>
		<li>
			<a href="<?php echo JRoute::_( 'index.php?option=com_user&view=reset' ); ?>">
			<?php echo JText::_('FORGOT_YOUR_PASSWORD'); ?></a>
		</li>
		<li>
			<a href="<?php echo JRoute::_( 'index.php?option=com_user&view=remind' ); ?>">
			<?php echo JText::_('FORGOT_YOUR_USERNAME'); ?></a>
		</li>
		<?php
		$usersConfig = &JComponentHelper::getParams( 'com_users' );
		if ($usersConfig->get('allowUserRegistration')) : ?>
		<li>
			<a href="<?php echo JRoute::_( 'index.php?option=com_user&view=register' ); ?>">
				<?php echo JText::_('REGISTER'); ?></a>
		</li>
		<?php endif; ?>
	</ul>-->

	<?php echo $params->get('posttext'); ?>

	<input type="hidden" name="option" value="com_user" />
	<input type="hidden" name="task" value="login" />
	<input type="hidden" name="return" value="<?php echo $return; ?>" />
	<?php echo JHTML::_( 'form.token' ); ?>

    <br><p><h4>Para cadastro ou problemas com login e senha, entre em contato com o setor de DTI.</h4></p>
</form>
<?php endif; ?>

O que está em comentário não está sendo utilizado... é o form onde o usuário iria digitar o login e a senha,

mas como estou passando os valores o usuário não precisa digitar.

Será que tem como eu tirar esse form, e fazer a chamada a função apenas por php???

 

Alguém tem mas alguma idéia do que seja???

Compartilhar este post


Link para o post
Compartilhar em outros sites

header('HTTP/1.1 401 Unauthorized');
header('WWW-Authenticate: NTLM');

Inverte a ordem.

As páginas de erro personalizado do IE devem de estar causando o problema.

 

ficaria assim

 

header('WWW-Authenticate: NTLM');
header('HTTP/1.1 401 Unauthorized');

Se o problema persistir, comente a segunda linha e verfique.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.