>
Supongamos que ud. tiene una empresa, y adquiere un hosting LAMP, como saben les dan un servidor de correo, ahora en ese hosting va a montar una aplicacion la cual usarán solo los empleados de su empresa que tienen una cuenta de correo en el mismo servidor.
Entonces no seria lo ideal que sus trabajadores se logueen en la aplicacion utilizando su cuenta y password de correo ?. Bueno en este post veremos como hacer eso.
Utilizaremos la clase phpmail y como siempre nuestro framework Kumbiaphp
Vamos a hacerlo rapido y sencillo. La idea es que sus usuarios ingresen a la aplicacion utilizando sus cuentas de email.
En Kumbiaphp 1.0 dentro de la carpeta [miapp]/core/libs/auth encontraremos las librerias que gestionan la autenticacion a la aplicacion, vamos a abrir el archivo auth.php
Dentro de ese archivo nos ubicaremos en la funcion
public function set_adapter ($adapter, $auth = null, $extra_args = array())
public function set_adapter ($adapter, $auth = null, $extra_args = array())
{
if (! in_array($adapter, array('digest' , 'http' , 'model' , 'kerberos5' , 'radius', 'smtp'))) {
throw new kumbiaException("Adaptador de autenticación '$adapter' no soportado");
}
$this->adapter = Util::camelcase($adapter);
require_once CORE_PATH . "libs/auth/adapters/{$adapter}_auth.php";
$adapter_class = $this->adapter . 'Auth';
$this->extra_args = $extra_args;
$this->adapter_object = new $adapter_class($auth, $extra_args);
}
Bien por ahora lo que hemos hecho es decir a la clase auth que existe otro metodo de autenticacion el cual lo hemos denominado smtp, ahora debemos implementarlo.
Para esto vamos a ingresar a la carpeta [miapp]/core/libs/auth/adapters y crearemos el archivo smtp_auth.php
En este archivo nos centraremos en el metodo autenticar.
public function authenticate ()
{
Load::lib("phpmailer");
$result=null;
if( $this->compare_attributes['login']!="" && $this->compare_attributes['password']!="" && $this->compare_attributes['server']!=""){//comprobar existencia de parametros
$login=$this->compare_attributes['login'];
$password=$this->compare_attributes['password'];
$server=$this->compare_attributes['server'];
/**
* Configuramos la conexion con el SMTP
*/
$mail=new phpmailer();
$mail->Mailer = "smtp";
$mail->Host = "$server";
$mail->Port = 25;
$mail->SMTPAuth = true;
$domain=substr($server,5);
$mail->Username = "$login@$domain"; // SMTP username
$mail->Password = "$password"; // SMTP password
/**
* Valido los datos con la funcion SmtpConnect()
*/
try{
if($mail->SmtpConnect()==true){
$identity = array();
$result=$true;
foreach ($usuario->fields as $field) {
/**
* Trata de no incluir en la identidad el password del usuario
*/
if (! in_array($field, array('password' , 'clave' , 'contrasena' , 'passwd' , 'pass'))) {
$identity[$field] = $usuario->$field;
}
}
}
$this->identity = $identity;
}catch(phpmailerException $ex){
Flash::error($ex->errorMessage() . "[$mail->Username | Server: $mail->Host]" );
}
}
return $result;
}
Como ven no es dificil ahora se preguntaran como se llama, bueno, supongamos que tienen un controlador login_controller.php y dentro una accion denominada autenticaralgo asi:
public function autenticar(){
if($this->has_post('user')){
$usuario=trim($this->post('user.login'));
$pwd=trim($this->post('user.password'));
$server="mail.miservidor.com";
$auth = new Auth("smtp", "server: $server","class: usuario", "login: $usuario", "password: $pwd");
if ($auth->authenticate()) {
$this->redirect("usuario/workspace");
} else {
$this->redirect("usuario/autenticar");
}
}
}
Y por ultimo, gracias a mi amigo José que me avisó, vamos a poner la vista, que debiera estar en [miapp]/login/autenticar tal como se ven en el controlador este formulario se carga mientras no se halla enviado por el método post la el array user.
<?php View::content(); ?>
<div id="login" style=" width:33%;">
<?php echo form_tag("usuario/autenticar/") ?>
<fieldset>
<legend>Ingreso al Sistema</legend>
<br />
<label>Usuario</label>
<?php echo text_field_tag(array('user.login')) ?>
<strong>@</strong>
<br/><br/>
<label>Clave</label>
<?php echo password_field_tag(array('user.password')) ?>
<br/><br/>
<?php echo submit_tag("Aceptar","id: save", "class: aceptar")?>
</fieldset>
</form>
</div>
Con lo que tendremos un formulario similar a este:
Bueno espero haber sido lo bastante explicativo, hasta otra entrada.
>muy interesante el articulo…lo dejo marcado en mis favoritos 🙂
>Gracias ^_^, me alegra que te haya parecido interesante, pronto estare posteando mas sobre el mismo tema