Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Precisa de ajuda para criar um script de login/registro de usuário personalizado


Para este exemplo, deixarei de fora as instruções preparadas, mas você precisará fazer alguma pesquisa sobre prevenção de injeção de SQL.

Primeiro você precisa de um formulário para o usuário usar para fazer login.Aqui está um formulário básico que estará em uma página chamada NewUser.html:
<form action="AddUser.php" method="POST">
<p>Enter A Username: </p>
<input type="text" name="User" maxlength="20" size="10">
<br />
<p>Enter A Password: </p>
<input type="password" name="Password" maxlength="40" size="10">
<br />
<p>Enter Password Again: </p>
<input type="password" name="PasswordX2" maxlength="40" size="10">
<br />
<input type="submit" value="Create Account">
</form>

É claro que você pode adicionar outros campos, como endereço de e-mail, etc, mas estou simplificando.

Agora vamos para a página AddUser.php:
<?php

//Now let's grab our $_POST data from our form and assign them to variables...
$User = $_POST['User'];
$PW = $_POST['Password'];
$PW2 = $_POST['PasswordX2'];

//Check whether user put anything in the fields for user or passwords
if (!$User || !$PW || !$PW2) {
echo "You have not entered all the needed info. Please try again.";
exit();
}

//Check if passwords match
if ($PW <> $PW2) {
echo "Your passwords do not match. Please go back and try again.";
exit();
}

//Now we want to be good stewards of passwords and information so let's hash that password
$hash = password_hash($PW, PASSWORD_BCRYPT);

//Open your connection to database
$dbconnect-> blah blah(make your database connection here)....

//Now let's insert the new user into the database - remember do not do this without SQL-injection prevention. I'm just giving you the basics.
$sql = "INSERT INTO UsersTable (UserName, Password)
VALUES ('".$User."', '".$hash."')";

//Verify Successful Entry
if (mysqli_query($dbconnect,$sql)) {
echo "User Added Successfully";
} else {
echo "Error Creating User: " . mysqli_error($dbconnect);
}

echo "<br /><p>Please go to the main page to login now.</p>";
?>

Então o usuário foi criado, a senha foi hash com um sal e inserida no banco de dados... sério, não se esqueça da injeção de SQL.

Agora você terá um formulário muito semelhante ao formulário NewUser.html para fazer login, mas não exigirá que a senha seja digitada duas vezes. Digamos que o formulário de login envie o usuário para uma página chamada login.php:
<?php
session_start(); //starts a session for tracking user on each page - this has to be on every page

//Let's get our variables from the POST data- will be identical to before most likely
$User = $_POST['User'];
$PW = $_POST['Password'];

//Open your connection to database
$dbconnect-> blah blah(make your database connection here)....

//Let's see if the username and password matches what we have in the database
$sql = "SELECT UsersTable.UserName, UsersTable.Password
FROM UsersTable
WHERE UsersTable.UserName = '$User'";
$result = $dbconnect->query($sql);

//Let's get the hashed password that corresponds to that username
$row = $result->fetch_assoc();
$HashedPassword = $row['Password'];

//Let's verify the password is correct
if (password_verify($PW, $HashedPassword))
{

//if it is correct(true) this will now happen
$_SESSION['verified_user'] = $User; //registers user by storing it in a SESSION
}
else {
echo "Login failed. Try again.";
exit();
}
?>

Apenas uma dica, se você quiser adicionar níveis de acesso você pode armazenar um local no banco de dados com um número de acesso (ex:1, 2, 3) e depois de logar com sucesso você atribuiria outro $_SESSION que representa seu nível de acesso e dá a eles acesso a certas seções que você permite.

Agora, quando eles navegarem para outras páginas do seu site, a sessão deles será verificada assim:

ExamplePage.php
<?php
session_start();

if (isset($_SESSION['verified_user'])) {
//User is verified and whatever is here will be visible and happen- YAY!
}
else {
echo "You are not logged in and cannot see this page.";
}
?>

Apenas adquira o hábito de iniciar uma sessão em todas as páginas onde o acesso só é permitido por quem está logado. As sessões são lembradas de página em página.

Não se esqueça de dar a eles uma página de logout que destruirá a sessão:logout.php
<?php
session_start();

unset($_SESSION['verified_user']);
session_destroy();
echo "You are logged out.";
?>