Underc0de

Foros Generales => Dudas y pedidos generales => Mensaje iniciado por: Fher en Marzo 06, 2019, 01:51:52 AM

Título: Validacion de usuarios
Publicado por: Fher en Marzo 06, 2019, 01:51:52 AM
Buenas noches

Alguien que me pueda guiar en la elaboracion de software utilizando validacion de terceros (email,
mensaje de texto y/o validación de dos pasos). es que tengo que realizar un proyecto pero no se como implementarlo, soy principiante en la programacion, por favor cualquier ayuda, gracias
Título: Re:Validacion de usuarios
Publicado por: ANTRAX en Marzo 06, 2019, 01:58:50 AM
Hola,
Podrías dejar mayor detalle?
En que lenguaje lo estas haciendo?
Es una aplicación Web?

Saludos
ANTRAX
Título: Re:Validacion de usuarios
Publicado por: Fher en Marzo 06, 2019, 01:59:23 AM
Si es una aplicacion web en php, estoy utilizando codeigniter
Título: Re:Validacion de usuarios
Publicado por: ANTRAX en Marzo 06, 2019, 02:08:30 AM
Casualmente, he estado leyendo bastante sobre frameworks en PHP, y todos dicen que es mejor Laravel.
Codeignither tiene muchas malas prácticas de programación. Si te puedes cambiar a Laravel, tu proyecto quizás vaya mejor.

Respecto a lo de la validación de mail en PHP, te dejo esto, espero que te sirva:

Base de datos:

La tabla de ejemplo de usuarios contiene cuatro campos: uid, email, password, activation y status.

Código (mysql) [Seleccionar]
CREATE TABLE IF NOT EXISTS `users` (
`uid` int(11) NOT NULL AUTO_INCREMENT,
`email` varchar(300) NOT NULL UNIQUE,
`password` varchar(300) NOT NULL,
`activation` varchar(300) NOT NULL UNIQUE,
`status` enum('0','1') NOT NULL DEFAULT '0',
PRIMARY KEY (`uid`)
)


Codigo HTML

Contiene la maqueta de nuestra aplicación

Código (html5) [Seleccionar]
<form action="" method="post">
<label>Email</label>
<input type="text" name="email" class="input" autocomplete="off"/>
<label>Password </label>
<input type="password" name="password" class="input" autocomplete="off"/><br/>
<input type="submit" class="button" value="Registration" />
<span class='msg'><?php echo $msg?></span>
</form>


db.php

Necesitamos un archivo de configuración para la conexión con la base de datos, y config.php será el encargado de ello. Mediante este archivo podrás modificar el nombre de usuario, la contraseña e incluso el nombre de la base de datos.

Código (php) [Seleccionar]
define('DB_SERVER', 'localhost');
define('DB_USERNAME', 'username');
define('DB_PASSWORD', 'password');
define('DB_DATABASE', 'database');
$connection = @mysqli_connect(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_DATABASE);
$base_url='http://www.youwebsite.com/email_activation/';


index.php

Almacena los valores de registro del usuario dentro de la tabla de usuarios que hemos creado previamente. Generamos el código de activación utilizando el sistema de encriptación MD5()

Código (php) [Seleccionar]
include 'db.php';
$msg='';
if(!empty($_POST['email']) && isset($_POST['email']) &&  !empty($_POST['password']) &&  isset($_POST['password']) )
{
// username and password sent from form
$email=mysqli_real_escape_string($connection,$_POST['email']);
$password=mysqli_real_escape_string($connection,$_POST['password']);
// regular expression for email check
$regex = '/^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,4})$/';

if(preg_match($regex, $email))
{
$password=md5($password); // encrypted password
$activation=md5($email.time()); // encrypted email+timestamp
$count=mysqli_query($connection,"SELECT uid FROM users WHERE email='$email'");
// email check
if(mysqli_num_rows($count) < 1)
{
mysqli_query($connection,"INSERT INTO users(email,password,activation) VALUES('$email','$password','$activation')");
// sending email
include 'smtp/Send_Mail.php';
$to=$email;
$subject="Email verification";
$body='Hi, <br/> <br/> We need to make sure you are human. Please verify your email and get started using your Website account. <br/> <br/> <a href="'.$base_url.'activation/'.$activation.'">'.$base_url.'activation/'.$activation.'</a>';

Send_Mail($to,$subject,$body);
$msg= "Registration successful, please activate email.";
}
else
{
$msg= 'The email is already taken, please try new.';
}

}
else
{
$msg = 'The email you have entered is invalid, please try again.';
}

}


Send_Mail.php

Función que enviará el correo de verificación. Acuérdate de modificar el host SMTP, el nombre de usuario y la contraseña. Si no cuentas con dichos datos, puedes utilizar los de Gmail.

Código (php) [Seleccionar]
function Send_Mail($to,$subject,$body)
{
require 'class.phpmailer.php';
$from       = "[email protected]";
$mail       = new PHPMailer();
$mail->IsSMTP(true);            // use SMTP
$mail->IsHTML(true);
$mail->SMTPAuth   = true;                  // enable SMTP authentication
$mail->Host       = "tls://smtp.yourwebsite.com"; // SMTP host
$mail->Port       =  465;                    // set the SMTP port
$mail->Username   = "SMTP_Username";  // SMTP  username
$mail->Password   = "SMTP_Password";  // SMTP password
$mail->SetFrom($from, 'From Name');
$mail->AddReplyTo($from,'From Name');
$mail->Subject    = $subject;
$mail->MsgHTML($body);
$address = $to;
$mail->AddAddress($address, $to);
$mail->Send();
}


activation.php

Basándonos en el código de activación que nos llega como parámetro en la url, activaremos al usuario modificando el campo status de la base de datos, de 0 a 1.

Código (php) [Seleccionar]
<?php
include 'db.php';
$msg='';
if(!empty(
$_GET['code']) && isset($_GET['code']))
{
$code=mysqli_real_escape_string($connection,$_GET['code']);
$c=mysqli_query($connection,"SELECT uid FROM users WHERE activation='$code'");

if(
mysqli_num_rows($c) > 0)
{
$count=mysqli_query($connection,"SELECT uid FROM users WHERE activation='$code' and status='0'");

if(
mysqli_num_rows($count) == 1)
{
mysqli_query($connection,"UPDATE users SET status='1' WHERE activation='$code'");
$msg="Your account is activated"
}
else
{
$msg ="Your account is already active, no need to activate again";
}

}
else
{
$msg ="Wrong activation code.";
}

}
?>

//HTML Part
<?php echo $msg?>


.htaccess

Lo que haremos en este script será redirigir la URL:

http://website.com/activation.php?code=ACTIVATION_CODE

a:

http://website.com/activation/ACTIVATION_CODE

Código (text) [Seleccionar]
RewriteEngine On

RewriteRule ^activation/([a-zA-Z0-9_-]+)$ activation.php?code=$1
RewriteRule ^activation/([a-zA-Z0-9_-]+)/$ activation.php?code=$1


Código CSS

Código (css) [Seleccionar]
body
{
font-family: "Helvetica",Arial,sans-serif;
font-weight: 500;
color:#333;
}
label
{
width:100px;
display:block;
font-weight:bold;
color:#666666;
}
#main
{
margin:0 auto;
width:800px;
}
.input
{
padding:10px;
font-size:14px;
border:1px solid #999999;
width:200px;
margin-bottom:10px;
}
.button {
padding:10px;
background-color: #5fcf80 !important;
border-color: #3ac162 !important;
}
.msg
{
font-size:11px;
color:#666;
padding:10px;
}


Fuente: https://www.9lessons.info/2013/11/php-email-verification-script.html

Saludos y espero que te sirva.
ANTRAX
Título: Re:Validacion de usuarios
Publicado por: animanegra en Marzo 06, 2019, 06:41:54 AM
Para verificación en dos pasos simplemente tienes que hacer una aplicación móvil y una php en la que se calcula el hmac del timestamp en UTC dividida entre un tiempo X (por ejemplo 30 segundos) y una clave aleatoria que se ha guardado en limpio en el servidor y se ha dado al cliente móvil. el resultado se reduce al numero de dígitos que se desee, por ejemplo 6 y se pide a la hora de haber metido el password correctamente. El código en PHP es bastante sencillo:


substr(hash_hmac('sha256',floor(time()/30) , $pass),0,$size)."\n";


Donde en $pass se almacena la password compartida y en $size se determina el tamaño de la clave OTP que desea introducir el usuario.