Почитал на форуме что у многих проблема с регистрацией и авторизацией пользователя под 3.3.5a
Выкладываю свой код под фреймворк Yii2, с базовыми знаниями PHP думаю ни у кого не составит труда этот класс переписать под себя
Ели есть вопросы задавайте, чем смогу помогу
Выкладываю свой код под фреймворк Yii2, с базовыми знаниями PHP думаю ни у кого не составит труда этот класс переписать под себя
PHP:
<?php
declare(strict_types=1);
namespace app\security;
use Yii;
use yii\base\Exception;
class Security
{
/**
* @param int $length
* @return string
* @throws Exception
*/
public function generateRandomString(int $length = 32): string
{
return Yii::$app->security->generateRandomString($length);
}
/**
* @param int $length
* @return string
* @throws Exception
*/
public function generateEmailVerificationToken(int $length = 32): string
{
return Yii::$app->security->generateRandomString() . '_' . time();
}
/**
* @param string $password
* @return string
* @throws Exception
*/
public function generatePasswordHash(string $password): string
{
return Yii::$app->security->generatePasswordHash($password);
}
public function validatePassword(
string $username,
string $password,
string $salt,
string $verifier
): bool
{
return ($verifier === $this->calculateSRP6Verifier($username, $password, $salt));
}
/**
* @param $username
* @param $password
* @return array
* @throws \Exception
*/
public function getSRP6RegistrationData($username, $password): array
{
$salt = random_bytes(32);
$verifier = $this->calculateSRP6Verifier($username, $password, $salt);
return [$salt, $verifier];
}
/**
* @param $username
* @param $password
* @param $salt
* @return string
*/
public function calculateSRP6Verifier($username, $password, $salt): string
{
// algorithm constants
$g = gmp_init(7);
$N = gmp_init('894B645E89E1535BBDAD5B8B290650530801B18EBFBF5E8FAB3C82872A3E9BB7', 16);
// calculate first hash
$h1 = sha1(strtoupper($username . ':' . $password), TRUE);
// calculate second hash
$h2 = sha1($salt . $h1, TRUE);
// convert to integer (little-endian)
$h2 = gmp_import($h2, 1, GMP_LSW_FIRST);
// g^h2 mod N
$verifier = gmp_powm($g, $h2, $N);
// convert back to a byte array (little-endian)
$verifier = gmp_export($verifier, 1, GMP_LSW_FIRST);
// pad to 32 bytes, remember that zeros go on the end in little-endian!
// done!
return str_pad($verifier, 32, chr(0), STR_PAD_RIGHT);
}
}
Ели есть вопросы задавайте, чем смогу помогу