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