Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: PHP, ошибка при регистрации

Приветствую
есть форма для регистрации и авторизации. Регистрация работает, а вот с авторизацией проблемка небольшая, выдает ошибки, что-то не то с переменными:
Notice: Undefined index: login in C:\USBWebserver - 8.6\root\registration\lib\user_class.php on line 42
Notice: Undefined index: password in C:\USBWebserver - 8.6\root\registration\lib\user_class.php on line 43
Notice: Undefined index: login in C:\USBWebserver - 8.6\root\registration\lib\user_class.php on line 42
Notice: Undefined index: password in C:\USBWebserver - 8.6\root\registration\lib\user_class.php on line 43
.
прошу помочь)
вот полный код рег. и авторизации, здесь 3 файла, ошибка в последнем выложенном
файл registration.php:
Код PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<?php
    header('Content-Type: text/html; charset=CP-1251');
    require_once "lib/user_class.php";
    $user = User::get_object();
    $auth = $user->is_auth();
    
    
    if (isset($_POST["reg"]))
    { 
    if($_POST['kapcha'] == $_SESSION['rand_code'])
        {
         $login = filter_var($_POST['login'], FILTER_SANITIZE_STRING);
         $password = filter_var($_POST['password'], FILTER_SANITIZE_STRING);
         $reg_success = $user->reg_user($login, $password);
        }
        else echo "<span class='error'>Проверочный код введен неправильно. </span>";
    }
 
    elseif (isset($_POST["auth"]))
    {
        $auth_success = $user->login($login, $password);
        if ($auth_success)
        {
            $login = filter_var($_POST['login'], FILTER_SANITIZE_STRING);
            $password = filter_var($_POST['password'], FILTER_SANITIZE_STRING);
            header("Location: registration/registration.php");
            exit;
        }
    }
?>
<!DOCTYPE html>
<html>
<head>
    <title>Регистрация и авторизация</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <link rel='StyleSheet' href='/css/login.css' type='text/css'>
    <style>
      .error{color:red;margin-left:15px; font-size: 17px; font-family: 'Lobster', cursive;}
    </style>
</head>
<body>
<?php 
        if ($auth)
        {
            echo "<html><head><meta    http-equiv='Refresh' content='0; URL=/index.php'></head></html>";
        }
        else 
        {
            if (isset($_POST["reg"]))
            {
                if ($reg_success) echo "<span class='error'>Регистрация прошла успешно!</span>";
                else echo "<span style='font-size: 17px; color:red; font-family: Lobster, cursive;margin-left:5px;'>Ошибка при регистрации!</span>";
            }
            elseif (isset($_POST["auth"]))
            {
                if ($auth_success) echo "<span class='error'>Авторизация прошла успешно!</span>";
                else echo "<span class='error'>Ошибка при авторизации!</span>";
            }
            [B]include "form_reg.php";[/B]
}?>
 
</body>
</html>
файл form_reg.php(формочка для рег. и авторизации):
Код HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<div id="close_auth">
<div id="login_container">
    <div id="form_container">
        <p class="login-text">Авторизация на сайте</p>
        <form name="auth" action="index.php" method="post">
    
                    <input type="text" name="login" placeholder='Логин' class='text_input'/>
                
                
                    <input type="password" name="password" placeholder='Пароль' class='text_input'/>
            
            
                    <input type="submit" name="auth" value="Войти" class="dop_text1" style="width:80px; margin:15px 0px 0px 105px"/>
        </form>
        <p class="login-text">Нет аккаунта? &nbsp;&nbsp;<input class="text_1" value="Регистрация" type='submit'  onClick="document.getElementById('close_auth').style.display = 'none';document.getElementById('open_reg').style.display = 'block' "/></p>
</div>
</div>
</div>
<div id="open_reg" style="display:none">
<div id="login_container_reg">
    <div id="form_container_reg">
        <p class="login-text1">Регистрация на сайте</p>
        <form method='POST' name="reg"  action="/index.php">
            <table><tr><td><input class='text_input_reg' placeholder="Введите код с картинки..."  type = "text" name = "kapcha" />&nbsp;</td><td><img src = "/kapcha/captcha.php" width="78" height="32"/></td></tr> </table></center>
            <input type='text' placeholder='Логин'  name='login'  class='text_input' />
            <input type='text' placeholder='Пароль'  name='password'  class='text_input' />
            <p><input type='submit' value="Зарегистрироваться" class="dop_text1" name="reg" /></p>
        </form> 
            <p class="login-text">Войти на сайт: &nbsp;&nbsp;<input class="text_1" value="Назад" type='submit' onClick="document.getElementById('open_reg').style.display = 'none';document.getElementById('close_auth').style.display = 'block' "/></p>
    </div>
</div>
</div>
файл user_class.php(там где ошибка-стр. 42-43):
Код PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<?php
session_start();
class User
{   
    private $db;
    
    private static $user = null;
    
    private function __construct()
    {       
        $this->db = new mysqli("localhost","root","usbw","diplom");
        $this->db->query("SET NAMES 'utf8'");
    }
    
    public static function get_object()
    {
        if (self::$user === null) self::$user = new User();
        return self::$user;
    }
    
    public function reg_user($login, $password)
    {
        if ($login == "") return false;
        if ($password == "") return false;
        $password = md5($password);
        $query = "INSERT INTO `users`(`login`, `password`, `regdate`) VALUES('$login', '$password', '" . time() . "')";
        return $this->db->query($query);
    }
    
    private function check_user($login, $password)
    {
        $resultset = $this->db->query("SELECT `password` FROM `users` WHERE `login` = '$login'");
        $user = $resultset->fetch_assoc();
        $resultset->close();
        if (!$user) return false;
        return $user["password"] === $password;
    }
    
    public function  is_auth()
    {
        
        $login = $_SESSION["login"];
        $password = $_SESSION["password"];
        //if ($_SESSION["login"] = "administrator") {echo "Hellow!!!";} 
        return $this->check_user($login, $password);
    }
    
    public function login($login, $password)
    {
        $password = md5($password);
        if ($this->check_user($login, $password))
        {
            $_SESSION["login"] = $login;
            $_SESSION["password"] = $password;
            return true;
        }
        else return false;
    }
    
    public function __destruct()
    {
        if ($this->db) $this->db->close();
    }
}
?>
как вы поняли, ошибка в последнем файле- user_class.php
буду благодарен очень за помощь
Ответ:
Сообщение от Solitaire Raven
Алекс_,
Я думаю в базе данных существует данная запись.
Попробуйте сделать truncate и заново сделать авторизацию.
Кажись вы тут ошиблись. Запись и должна существовать! Для этого мы и делаем выборку SELECTом. И truncate делать ни в коем случае нельзя, уйдут все аккаунты из базы.
Вопрос: Какими способами можно защитить систему авторизации/регистрации от взлома пароля?

Какими способами можно защитить систему авторизации/регистрации от взлома пароля??? и от brute force?
Ответ: закрыто, создано во фрилансе.
Вопрос: Как осуществить авторизацию / регистрацию в Yii2 по уникальному никнейму?

как осуществить авторизацию / регистрацию в юии2 по уник никнейму-- как это реализовать
Ответ: Примерно так, но не знаю на сколько это правильно, не пробовал такое в деле

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public static function findByNickName($nickname)
    {
        $user = static::find()->where(['and', ['nickname=:nickname']], [':status' => self::STATUS_ACTIVE, ':nickname' => $nickname])->one();
    }
if($user instanceof User)
          return $user;
 else {
            $user = new User();
            $user->nickname = $nickname;
//статус пользователя и т.д
            $user->generateAuthKey();
            if($user->save())
            {
                //$userRole = Yii::$app->authManager->getRole('user');
                //Yii::$app->authManager->assign($userRole, $user->getId());
                //еще манипуляции
               return $user;
            }
        }
return null;
Вопрос: Авторизация не работает

Регистрация проходит нормально и подтверждается аккаунт. Но с авторизацией трабл. Все время Ошибка что неверный пасс или логин. Не могу догнать в чем трабл.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
else if ($Module == 'login' and $_POST['enter']) {
$_POST['login'] = FormChars($_POST['login']);
$_POST['password'] = GenPass(FormChars($_POST['password']), $_POST['login']);
$_POST['captcha'] = FormChars($_POST['captcha']);
if (!$_POST['login'] or !$_POST['password'] or !$_POST['captcha']) MessageSend(1, 'Невозможно обработать форму.');
if ($_SESSION['captcha'] != md5($_POST['captcha'])) MessageSend(1, 'Капча введена не верно.');
$Row = mysqli_fetch_assoc(mysqli_query($CONNECT, "SELECT `password`, `active` FROM `users` WHERE `login` = '$_POST[login]'"));
if ($Row['password'] != $_POST['password']) MessageSend(1, 'Неверный логин или пароль.');
if ($Row['active'] == 0) MessageSend(1, 'Аккаунт пользователя <b>'.$_POST['login'].'</b> не подтвержден.');
$Row = mysqli_fetch_assoc(mysqli_query($CONNECT, "SELECT `id`, `name`, `regdate`, `email`, `country`, `avatar` FROM `users` WHERE `login` = '$_POST[login]'"));
$_SESSION['USER_ID'] = $Row['id'];
$_SESSION['USER_NAME'] = $Row['name'];
$_SESSION['USER_REGDATE'] = $Row['regdate'];
$_SESSION['USER_EMAIL'] = $Row['email'];
$_SESSION['USER_COUNTRY'] = UserCountry($Row['country']);
$_SESSION['USER_AVATAR'] = $Row['avatar'];
$_SESSION['USER_LOGIN_IN'] = 1;
exit(header('Location: test:80/page/profile.php'));
Ответ: Kaisten, Проверьте как шифрует при регистрации, и при сравнении.
Вопрос: Создание системы регистрации/авторизации

Фабула
-----------------------------------------------------------------------------------------------------------------------------
Подумал, подумал и все ж создал новую тему. Мой вопрос относится к созданию системы регистрации/авторизации ... может кто подскажет как действовать или укажет на возможную ошибку .... для того, чтобы разобраться в алгоритме настройки взял простой пример из интернета, поправил ошибки авторов, запустил, все работает, т.е. форма регистрации отправляет в базу данных регистрационные данные, форма авторизации срабатывает, отправляя пользователя на промежуточную страницу с приветственным сообщением, подставляя в качестве имени вошедшего сессионную переменную, в которую принят логин пользователя ( в моем случае он называется username ). Все хорошо, но хотелось бы, чтобы в сессионную переменную принималось регистрационное имя пользователя. То, которое хранится в БД в качестве его настоящего имени. Ну, вот, например, не "Привет, meduza!", а "Привет, Михаил!". Я думаю вы понимаете суть проблемы.

По существу
------------------------------------------------------------------------------------------------------------------------------
Приведу полностью сначала рабочие варианты файла регистрации register.php

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<?php require_once("includes/connection.php"); ?>
<?php include("includes/header.php"); ?>
<?php
    
    if(isset($_POST["register"])){
    
    if(!empty($_POST['full_name']) && !empty($_POST['email']) && !empty($_POST['username']) && !empty($_POST['password'])) {
  $full_name= htmlspecialchars($_POST['full_name']);
    $email=htmlspecialchars($_POST['email']);
 $username=htmlspecialchars($_POST['username']);
 $password=md5($_POST['password']);
 $query=mysql_query("SELECT * FROM usertbl WHERE username='".$username."'");
  $numrows=mysql_num_rows($query);
if($numrows==0)
   {
    $sql="INSERT INTO usertbl
  (full_name, email, username,password)
    VALUES('$full_name','$email', '$username', '$password')";
  $result=mysql_query($sql);
 if($result){
    $message = "Account Successfully Created";
} else {
 $message = "Failed to insert data information!";
  }
    } else {
    $message = "That username already exists! Please try another one!";
   }
    } else {
    $message = "All fields are required!";
    }
    }
if (!empty($message)) {echo "<p class='error'>". "MESSAGE: ". $message . "</p>";}
    ?>
<div class="container mregister">
<div id="login">
 <h1>Регистрация</h1>
<form action="register.php" id="registerform" method="post"name="registerform">
 <p><label for="user_login">Полное имя<br>
 <input class="input" id="full_name" name="full_name"size="32"  type="text" value=""></label></p>
<p><label for="user_pass">E-mail<br>
<input class="input" id="email" name="email" size="32"type="email" value=""></label></p>
<p><label for="user_pass">Имя пользователя<br>
<input class="input" id="username" name="username"size="20" type="text" value=""></label></p>
<p><label for="user_pass">Пароль<br>
<input class="input" id="password" name="password"size="32"   type="password" value=""></label></p>
<p class="submit"><input class="button" id="register" name= "register" type="submit" value="Зарегистрироваться"></p>
      <p class="regtext">Уже зарегистрированы? <a href= "login.php">Введите имя пользователя</a>!</p>
 </form>
</div>
</div>
<?php include("includes/footer.php"); ?>
файла авторизации login.php

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<?php  if(isset($_SESSION["session_username"])){
    // вывод "Session is set"; // в целях проверки
    header("Location: intropage.php");
    }
 
    if(isset($_POST["login"])){
 
    if(!empty($_POST['username']) && !empty($_POST['password'])) {
    $username=htmlspecialchars($_POST['username']);
    $password=md5($_POST['password']);
    $query =mysql_query("SELECT * FROM usertbl WHERE username='".$username."' AND password='".$password."'");
    $numrows=mysql_num_rows($query);
    if($numrows!=0)
 {
while($row=mysql_fetch_assoc($query))
 {
    $dbusername=$row['username'];
  $dbpassword=$row['password'];
 }
  if($username == $dbusername && $password == $dbpassword)
 {
    // старое место расположения
    //  session_start();
     $_SESSION['session_username']=$username;    
 /* Перенаправление браузера */
   header("Location: intropage.php");
    }
    } else {
    //  $message = "Invalid username or password!";
    
    echo  "Invalid username or password!";
 }
    } else {
    $message = "All fields are required!";
    }
    }
    ?>
<?php include("includes/header.php"); ?>
<?php require_once("includes/connection.php"); ?>
<?php include("includes/header.php"); ?>
<div class="container mlogin">
<div id="login">
<h1>Вход</h1>
<form action="" id="loginform" method="post"name="loginform">
<p><label for="user_login">Имя опльзователя<br>
<input class="input" id="username" name="username"size="20"
type="text" value=""></label></p>
<p><label for="user_pass">Пароль<br>
 <input class="input" id="password" name="password"size="20"
  type="password" value=""></label></p> 
    <p class="submit"><input class="button" name="login"type= "submit" value="Log In"></p>
    <p class="regtext">Еще не зарегистрированы?<a href= "register.php">Регистрация</a>!</p>
   </form>
 </div>
  </div>
<?php include("includes/footer.php");?>
и промежуточного файла intropage.php

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php session_start();
 
if(!isset($_SESSION["session_username"])):
header("location:login.php");
else:
?>
    
<?php include("includes/header.php"); ?>
<div id="welcome">
<h2>Добро пожаловать, <span><?php echo $_SESSION['session_username'];?>! </span></h2>
  <p><a href="logout.php">Выйти</a> из системы</p>
</div>
    
<?php include("includes/footer.php"); ?>
    
<?php endif;?>
Комментарии авторов оставил - они мне не мешают.

Теперь то, что нафантазировал я. Сразу скажу, что внес кое-какие изменения: в форме регистрации добавил еще одно поле для ввода имени пользователя (назвал его name) и в код php соот-но тоже, добавил строку в таблице БД. Новая регистрация работает без проблем, все данные заносятся в БД.

А вот подправленный файл login.php

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<?php session_start();?>
<?php require_once("includes/connection.php"); ?>
<?php if(isset($_SESSION["session_name"])){
    // вывод "Session is set"; // в целях проверки
    header("Location: intropage.php");
    }
 
    if(isset($_POST["login"])){
 
    if(!empty($_POST['username']) && !empty($_POST['password'])) {
    $username=htmlspecialchars($_POST['username']);
    $password=md5($_POST['password']);
    $query =mysql_query("SELECT name, username, password FROM usertbl WHERE name='".$name."' AND username='".$username."' AND password='".$password."'");
    $numrows=mysql_num_rows($query);
    if($numrows!=0)
 {
while($row=mysql_fetch_assoc($query))
 {
    $dbname=$row['name'];
    $dbusername=$row['username'];
    $dbpassword=$row['password'];
 }
  if($username == $dbusername && $password == $dbpassword)
 {
    // старое место расположения
    //  session_start();
     $_SESSION['session_name']=$name;
     
 /* Перенаправление браузера */
   header("Location: intropage.php");
    }
    } else {
    //  $message = "Invalid username or password!";
    
    echo  "Invalid username or password!";
 }
    } else {
    $message = "All fields are required!";
    }
    }
    ?>
<?php include("includes/header.php"); ?>
<?php require_once("includes/connection.php"); ?>
<?php include("includes/header.php"); ?>
<div class="container mlogin">
<div id="login">
<h1>Вход</h1>
<form action="" id="loginform" method="post"name="loginform">
<p><label for="user_login">Имя пользователя<br>
<input class="input" id="username" name="username"size="20"
type="text" value=""></label></p>
<p><label for="user_pass">Пароль<br>
 <input class="input" id="password" name="password"size="20"
  type="password" value=""></label></p> 
    <p class="submit"><input class="button" name="login"type= "submit" value="Log In"></p>
    <p class="regtext">Еще не зарегистрированы?<a href= "register.php">Регистрация</a>!</p>
   </form>
 </div>
  </div>
<?php include("includes/footer.php"); ?>
и intropage.php

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php session_start();
 
if(!isset($_SESSION["session_name"])):
header("location:login.php");
else:
?>
    
<?php include("includes/header.php"); ?>
<div id="welcome">
<h2>Добро пожаловать, <span><?php echo $_SESSION['session_name'];?>! </span></h2>
  <p><a href="logout.php">Выйти</a> из системы</p>
</div>
    
<?php include("includes/footer.php"); ?>
    
<?php endif?>
Идея заключалась в том, чтобы сформировав запрос к БД, дополнительно к username и password вытащить из БД переменную name, произвести как и в рабочем варианте проверку на соответствие логина и пароля, но в качестве сессионной переменной принять не извлеченную из БД переменную $username, а регистрационное имя пользователя $name. И дальше его уже использовать в файле intropage.php ... но что-то пошло не так. При попытке авторизоваться показывается сообщение о неверном логине или пароле. И вот где собака порылась не могу понять. Help, please!
Ответ: Не совсем понял в чем заключалась идея, но думаю, прежде чем править, стоит самому попробовать разработать php код для авторизации пользователя на сайте...
Вопрос: PHP хэширование и авторизация из базы данных

Добрый вечер.

Имею страницу со входом и регистрацией.
Код регистрации:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
<?php
 
namespace XFO;
 
class registerUser {
    private $conn;
    private $escapeObj;
    private $id;
 
    private $name;
    private $usename;
    private $email;
    private $password;
    private $gender;
    private $birthday = '1-1-1990';
    private $location = '';
    private $hometown = '';
    private $about = '';
 
    private $allowedGenders = array('male', 'female');
 
    function __construct()
    {
        global $conn;
        $this->conn = $conn;
        $this->escapeObj = new \XFO\Escape();
        return $this;
    }
 
    public function setConnection(\mysqli $conn)
    {
        $this->conn = $conn;
        return $this;
    }
 
    protected function getConnection()
    {
        return $this->conn;
    }
 
    public function register()
    {
        if (! empty ($this->name) && ! empty ($this->username) && ! empty ($this->email) && ! empty ($this->password) && ! empty ($this->gender))
        {
            $query = $this->getConnection()->query("INSERT INTO " . DB_ACCOUNTS . " (active,about,cover_id,email,email_verification_key,name,password,time,type,username) VALUES (1,'" . $this->about . "',0,'" . $this->email . "','" . md5(generateKey()) . "','" . $this->name . "','". password_hash ($this->password, PASSWORD_DEFAULT) ."'," . time() . ",'user','" . $this->username . "')");
 
            if ($query)
            {
                $this->id = $this->getConnection()->insert_id;
                $query2 = $this->getConnection()->query("INSERT INTO " . DB_USERS . " (id,birthday,gender,current_city,hometown) VALUES (" . $this->id . ",'" . $this->birthday . "','" . $this->gender . "','" . $this->location . "','" . $this->hometown . "')");
 
                if ($query2)
                {
                    $timelineObj = new \XFO\User();
                    $timelineObj->setId($this->id);
                    $get = $timelineObj->getRows();
                    return $get;
                }
            }
        }
    }
 
    private function validateUsername($u)
    {
        if (strlen($u) > 3 && ! is_numeric($u) && preg_match('/^[A-Za-z0-9_]+$/', $u))
        {
            return true;
        }
    }
 
    public function setName($n)
    {
        if (! empty($n))
        {
            $this->name = $this->escapeObj->stringEscape($n);
        }
    }
 
    public function setUsername($u)
    {
        if ($this->validateUsername($u))
        {
            $this->username = $this->escapeObj->stringEscape($u);
        }
    }
 
    public function setEmail($e)
    {
        if (filter_var($e, FILTER_VALIDATE_EMAIL))
        {
            $this->email = $this->escapeObj->stringEscape($e);
        }
    }
 
    public function setPassword($p)
    {
        if (! empty($p))
        {
            $this->password = $p;
        }
    }
 
    public function setGender($g)
    {
        if (in_array($g, $this->allowedGenders))
        {
            $this->gender = $g;
        }
    }
 
    public function setBirthday($b)
    {
        if (is_array($b))
        {
            $b = implode('-', $b);
            $regex = '/^([0-9]{1,2})\-([0-9]{1,2})\-([0-9]{4})$/';
 
            if (preg_match($regex, $b))
            {
                $this->birthday = $b;
            }
        }
    }
 
    public function setLocation($l)
    {
        if (! empty($l))
        {
            $this->location = $this->escapeObj->stringEscape($l);
        }
    }
 
    public function setHometown($h)
    {
        if (! empty($h))
        {
            $this->hometown = $this->escapeObj->stringEscape($h);
        }
    }
 
    public function setAbout($a)
    {
        if (! empty($a))
        {
            $this->about = $this->escapeObj->stringEscape($a);
        }
    }
}
После регистрации пароль успешно хэшируется и вносится в базу данных. Принимая значение примерно "$2Y10..", длиной 60 символов.

После регистрации автоматические открывается страница с профилем.
Но вот повторная авторизация не работает, пишет пароль неверный.

Код авторизации:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<?php
    $data['error_message'] = $lang['error_empty_login'];
 
    $loginId = $escapeObj->stringEscape($_POST['login_id']);
    $hash = password_hash($_POST['login_password'], PASSWORD_DEFAULT);
    $crypto_pass = password_verify($_POST['login_password'], $hash);
 
    $userId = getUserId($conn, $loginId);
 
    if ($userId)
    {
    $query = $conn->query("SELECT id,username,email_verified FROM " . DB_ACCOUNTS . " WHERE id=$userId AND password='$crypto_pass' AND type='user' AND active=1");
    $data['error_message'] = $lang['error_bad_login'];
 
    if ($query->num_rows == 1)
    {
    $fetch = $query->fetch_array(MYSQLI_ASSOC);
    $continue = true;
 
    if ($config['email_verification'] == 1 && $fetch['email_verified'] == 0)
    {
        $continue = false;
        $data['error_message'] = $lang['error_verify_email'];
    }
 
    if ($continue == true)
    {
        $_SESSION['user_id'] = $fetch['id'];
        $_SESSION['user_pass'] = $crypto_pass;
 
        if (isset($_POST['keep_logged_in']) && $_POST['keep_logged_in'] == true)
        {
            setcookie('sk_u_i', $_SESSION['user_id'], time() + (60 * 60 * 24 * 7));
            setcookie('sk_u_p', $_SESSION['user_pass'], time() + (60 * 60 * 24 * 7));
        }
 
        $data['status'] = 200;
        $data['redirect_url'] = smoothLink('index.php?tab1=home');
    }
   }
     else
{
    $data['error_message'] = $lang['incorrect_password'];
}
    }
    else
   {
$data['error_message'] = $lang['no_user_found'];
    }
 
    header("Content-type: application/json; charset=utf-8");
    echo json_encode($data);
    $conn->close();
    exit();
вероятно хэш не сходится, не могу понять в чем проблема, благодарен если поможете.

P.S> подобный код для админки работает, вот код авторизации админки, рабочий:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
if (! empty($_POST['admin_login']) && isset($_POST['keep_blank']) && empty($_POST['keep_blank']))
{
    if (!empty($_POST['admin_username']) && !empty($_POST['admin_password']))
    {
        $admin_username = SK_secureEncode($_POST['admin_username']);
        $admin_password = SK_secureEncode($_POST['admin_password']);
        $hash = password_hash($_POST['admin_password'], PASSWORD_DEFAULT);
        $cr_admin_password = password_verify($_POST['admin_password'], $hash);
        
        $config = array();
        $confQuery = mysqli_query($dbConnect, "SELECT * FROM " . DB_CONFIGURATIONS);
        $config = mysqli_fetch_assoc($confQuery);
        
        if ($admin_username == $config['admin_username'] && $cr_admin_password == $config['admin_password'])
        {
            $_SESSION['admin_id'] = $admin_username;
            $_SESSION['admin_password'] = $cr_admin_password;
            header('Location: ?logged_in');
        }
    }
}
Ответ:
Сообщение от WhiteMind
заменить
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<?php
    $data['error_message'] = $lang['error_empty_login'];
 
    $loginId = $escapeObj->stringEscape($_POST['login_id']);
    $hash = password_hash($_POST['login_password'], PASSWORD_DEFAULT);
    $crypto_pass = password_verify($_POST['login_password'], $hash);
 
    $userId = getUserId($conn, $loginId);
 
    if ($userId)
    {
    $query = $conn->query("SELECT id,username,email_verified FROM " . DB_ACCOUNTS . " WHERE id=$userId AND password='$crypto_pass' AND type='user' AND active=1");
    $data['error_message'] = $lang['error_bad_login'];
 
    if ($query->num_rows == 1)
    {
    $fetch = $query->fetch_array(MYSQLI_ASSOC);
    $continue = true;
 
    if ($config['email_verification'] == 1 && $fetch['email_verified'] == 0)
    {
        $continue = false;
        $data['error_message'] = $lang['error_verify_email'];
    }
 
    if ($continue == true)
    {
        $_SESSION['user_id'] = $fetch['id'];
        $_SESSION['user_pass'] = $crypto_pass;
 
        if (isset($_POST['keep_logged_in']) && $_POST['keep_logged_in'] == true)
        {
            setcookie('sk_u_i', $_SESSION['user_id'], time() + (60 * 60 * 24 * 7));
            setcookie('sk_u_p', $_SESSION['user_pass'], time() + (60 * 60 * 24 * 7));
        }
 
        $data['status'] = 200;
        $data['redirect_url'] = smoothLink('index.php?tab1=home');
    }
   }
     else
{
    $data['error_message'] = $lang['incorrect_password'];
}
    }
    else
   {
$data['error_message'] = $lang['no_user_found'];
    }
 
    header("Content-type: application/json; charset=utf-8");
    echo json_encode($data);
    $conn->close();
    exit();
на
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<?php
    $data['error_message'] = $lang['error_empty_login'];
 
    $loginId = $escapeObj->stringEscape($_POST['login_id']);
    $crypto_pass = password_hash($_POST['login_password'], PASSWORD_DEFAULT);
 
    $userId = getUserId($conn, $loginId);
 
    if ($userId)
    {
    $query = $conn->query("SELECT id,username,email_verified FROM " . DB_ACCOUNTS . " WHERE id=$userId AND password='$crypto_pass' AND type='user' AND active=1");
    $data['error_message'] = $lang['error_bad_login'];
 
    if ($query->num_rows == 1)
    {
    $fetch = $query->fetch_array(MYSQLI_ASSOC);
    $continue = true;
 
    if ($config['email_verification'] == 1 && $fetch['email_verified'] == 0)
    {
        $continue = false;
        $data['error_message'] = $lang['error_verify_email'];
    }
 
    if ($continue == true)
    {
        $_SESSION['user_id'] = $fetch['id'];
        $_SESSION['user_pass'] = $crypto_pass;
 
        if (isset($_POST['keep_logged_in']) && $_POST['keep_logged_in'] == true)
        {
            setcookie('sk_u_i', $_SESSION['user_id'], time() + (60 * 60 * 24 * 7));
            setcookie('sk_u_p', $_SESSION['user_pass'], time() + (60 * 60 * 24 * 7));
        }
 
        $data['status'] = 200;
        $data['redirect_url'] = smoothLink('index.php?tab1=home');
    }
   }
     else
{
    $data['error_message'] = $lang['incorrect_password'];
}
    }
    else
   {
$data['error_message'] = $lang['no_user_found'];
    }
 
    header("Content-type: application/json; charset=utf-8");
    echo json_encode($data);
    $conn->close();
    exit();
Не работает. Пишет неверный пароль....

Добавлено через 3 часа 43 минуты
есть идеи?
Вопрос: Форма авторизации php+mysql

Добрый день. Подскажите пожалуйста.
Проблема такая мне необходимо авторизоваться и перейти на страничку. Дак вот, создал я форму, подключил базу, форма регистрации работает. Но ,никак не могу при входе в форму авторизации ввести логин и пароль ,постоянно пишет что мы не ввели его. Подскажите как быть. Код приложен ниже.
Форма авторизации.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<html>
<form method="POST" action="index1.php" enctype="heder.php">
<title>Форма входа </title>
    <center>
        <table>
            <tr>
                <h1> Форма входа </h1>  
            </tr>
            <tr>
            </tr>
            <tr>
            <td>Логин</td> <td> <input TYPE='text' name='login'></td><td> <span id="login"></span></td> 
            </tr>
            <tr>
            <td>Пароль</td> <td> <input TYPE='password' name='password' ></td><td> <span id="password"></span></td> 
            </tr>
            <td colspan='3'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type='submit' value="Регистрация"></form>
            <form method="POST" action="avtorizate.php" enctype="heder.php">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type='submit' value="Вход">
        </table>
    </center>
</form>
</html>
Файл для проверки с базой данных.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<?php
session_start();
$db = mysql_connect("localhost", "formareg", "12345")
or die("База данных не отвечает. подождите или проверьте файлы конфигурации.");
mysql_select_db("formareg", $db)
or die("Такой базы данных на сервере не существует");
 
if (isset($_POST['login'])) 
{ $login = $_POST['login']; 
if ($login =='') 
{ unset($login);} } 
 
//Заносим пароль, если не введен обнуляем
if (isset($_POST['password'])) { $password=$_POST['password']; 
if ($password =='') 
{ unset($password);} }
   
if (empty($login) or empty($password)) //если пользователь не ввел логин или пароль, то выдаем ошибку и останавливаем скрипт
    {
    exit 
("<body>
<div align='center'><br/><br/><br/>
<h3>No login and pass" . "
<a href='index.php'> <b>Back</b> </a>
</h3>
</div>
</body>");
    }
    //если логин и пароль введены,то обрабатываем их, чтобы теги и скрипты не работали, мало ли что люди могут ввести
else{
   $login = stripslashes($login);
    $login = htmlspecialchars($login);
    $password = stripslashes($password);
    $password = htmlspecialchars($password);
//удаляем лишние пробелы
    $login = trim($login);
    $password = trim($password);
    
 //Подключаемся к базе данных.
    
    
 //извлекаем из базы все данные о пользователе с введенным логином
$result = mysql_query("SELECT * FROM `formareg`.`user` login='$login'", $db);
    $myrow = mysql_fetch_array($result);
    if (empty($myrow["password"]))
    {
    //если пользователя с введенным логином не существует
    exit ("<body><div align='center'><br/><br/><br/>
    <h3>Извините, введённый вами login или пароль неверный." . "<a href='index.php'> <b>Назад</b> </a></h3></div></body>");
    }
    else{
                //если существует, то сверяем пароли
        if ($myrow["password"]==$password) 
            {
            //если совпадают запустим сессию
            $_SESSION['login']=$myrow["login"]; 
            $_SESSION['id']=$myrow["id"];//эти данные очень часто используются, вот их и будет "носить с собой" вошедший пользователь
            header("Location:heder.php"); 
            }
        else{  exit ("<body><div align='center'><br/><br/><br/>
                        <h3>Извините, введённый вами login или пароль неверный." . "
                        <a href='index.php'> <b>Назад</b> </a></h3></div></body>");
            }
        }
}
?>
Дальше вот этого условия неудается пройти.
PHP
1
2
3
4
5
6
7
8
9
10
11
if (empty($login) or empty($password)) //если пользователь не ввел логин или пароль, то выдаем ошибку и останавливаем скрипт
    {
    exit 
("<body>
<div align='center'><br/><br/><br/>
<h3>No login and pass" . "
<a href='index.php'> <b>Back</b> </a>
</h3>
</div>
</body>");
    }
Ответ: Всем спасибо за ответы, разобрался, ошибка была в отправке формы, не правильно указал отправку данных, они не записывались в переменные. проблема решена.
Вопрос: Стандартная авторизация, связь пользователей с сущностями из моей базы

Простите, но я, если что, в ASP.NET полный новичёк.
У меня есть своя база данных, там, вкратце, есть продукт и её владелец (ну и ещё много всего). И я хочу использовать встроенный готовый модуль авторизации/регистрации, и чтобы владельцами продуктов были сами пользователи, которые регистрируются/авторизуются.
Возможно, можно так сделать, чтобы это было в разных базах данных, но мне это кажется не очень, и я бы хотел объединить это в одну базу данных.
Я пытался, я в мою базу скопировал все таблицы из стандартной бд для регистрации, сменил ApplicationDbContext() с "DefaultConnection" на "MyBDEntities", и оно падает на строчке "var user = await UserManager.FindAsync(model.UserName, model.Password);" в функции "Login" - пишет, что "Тип сущности ApplicationUser не входит в модель для текущего контекста". И дальше я не вдупляю.
Подскажите, что делать, правильно ли я вообще начал, или надо делать совсем по-другому.


P. S. И ещё, я там как-то нажал перестроить проект, и, возможно после этого, у меня из модели вроде пропали половина классов, по крайней мере, если пытаться создать контроллер, в выборе класса модели не все показаны. Пришлось проект пересоздавать. Но не хочется всё, что я уже в интерфейсе поменял, копипастить, может, кто подскажет, как исправить?
Ответ: Я сделал авторизацию через FormsAuthentication. Удаляйте тему.
Вопрос: Авторизация не работает, login.php

Решил я написать самодельный файловый хостинг,где у людей будет свой личный кабинет (после регистрации и авторизации,кочечно), и они в нём смогут размещать файлы и делиться ими с друзьями, знакомыми, и так далее.

Написал код авторизации, но она выдаёт личный кабинет даже тогда, когда пароль ввёдён неверно, в чём ошибка?

Работать должна так: Авторизовываешься, Если пароль верный, то: Извлекается .zip архив с данными, затем показывается личный кабинет, который только что был в .zip архиве. И дальше пользователь может опубликовать файл, а если пароль введён неверно, то должно выдавать ошибку. Так вот, в чём ошибка в моём коде?

Код:
PHP
1
2
3
4
5
6
7
8
9
10
11
<?php
$nick =  $_POST['nick'];
$password = $_post['password'];
$file = file($nick.'data.txt');
$zip = new ZipArchive;
$zip -> open('file.zip');
$zip -> extractTo('./'.$nick);
$zip -> close();
if($password != $file[0]) {header ('Location: /'.$nick.'/index.html');}else{echo('error');}
 
?>
Для меня это очень важно.
Ответ:
Сообщение от theproger
PHP
1
if($password != $file[0])
Может == вместо != ?
Вопрос: Редирект после авторизации

Всем добрый вечер. Собственно нужен совет знающих. У меня есть подобие сайта, с авторизацией\регистрацией, мне нужно теперь сделать так, чтобы после авторизации, происходил редирект на другую страницу (определенную страницу). В моем случае на лок. сервере имеется 2а сайта, и нужно, чтобы с одного, происходил редирект на друой.

Код PHP
1
2
3
4
function redirect(){
    $redirect = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : PATH;
    header("Location: $redirect");
    exit;
Где и как это прописать?

Давно не брался за сайт и уже позабыл всё...

Код PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function authorization(){
     $login = mysql_real_escape_string(trim($_POST['login']));
    $pass = trim($_POST['pass']);
    
    if(empty($login) OR empty($pass)){
        //если пусты поля логин и пароль
        $_SESSION['auth']['error'] = "<div class='error'>Поля логин и паhоль должны быть заполнены!</div>";
        }else{
            //если получены данные из полей логин и пароль
            $pass = md5($pass);
            
            $query = "SELECT name FROM customers WHERE login = '$login' AND password = '$pass' LIMIT 1";
            $res = mysql_query($query) or die (mysql_error());
            if(mysql_num_rows($res) == 1){
                //если авторизация успешна
                $row = mysql_fetch_row($res);
                $_SESSION['auth']['user'] = $row[0];
            }else{
                //если неверен логин или пароль
                 $_SESSION['auth']['error'] = "<div class='error'>Неверный логин или пароль</div>";
            
            }
        }
Ответ: Да но без тэгов [color]
header("Location: http://www.site.ru");
Код PHP
1
2
3
4
if(mysql_num_rows($res) == 1){
                //если авторизация успешна
               header("Location: http://www.site.ru");
            }