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())
En la condicional agregaremos al array el elmento smtp , tal como se muestra en el codigo inferior
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.
Cargamos la libreria phpmailer, luego verificamos que se encuentren los atributos necesarios esto es login, password y server, configuramos la conexion smtp ha utilizar, asignamos el usuario y password a $mail->Username y $mail->Password respectivamente, con el metodo $mail->SmtpConnect() comprobamos la autenticacion, una vez hecho esto en el objeto identity ponemos los datos de nuestro usuario si fuera necesario.
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 veran no aparece la asignacion a $usuario porque eso ya depende de uds. puede hacerse con una llamada a la BD como $usuario=ActiveRecord::get($this->class)->find_by_login($login);
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 autenticar algo asi:
Funcion autenticar del controlador Login
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. 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");
}
}
}
Vista : autenticar.phtml
<?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 :)
ResponderEliminarGracias ^_^, me alegra que te haya parecido interesante, pronto estare posteando mas sobre el mismo tema
ResponderEliminar