Я разрабатываю API для правительственного агентства, им требовались некоторые условия, такие как:
Базовая аутентификация с использованием хэша:
$pass = 'password';
$hash_pass = sha256($pass.date('Y-m-d'));
$full_hash = base_64('username'.':'.$hash_pass);
Итак, они отправляют мне заголовок authorizarion вроде:
Basic $ full_hash
На моем промежуточном программном обеспечении я использую это:
public function handle($request, Closure $next)
{
$authorization_code = explode(" ", $request->header('Authorization'));
$hash = base64_decode($authorization_code[1]);
$user = explode(":", $hash);
$data['username'] = $user[0];
$user_db = User::where('username', $data['username'])->first();
$data['password'] = $user[1];
$today = date('Y-m-d');
$request->headers->set('php-auth-user', $data['username']);
$request->headers->set('php-auth-pw', $data['password']);
return $response = auth()->basic('username') ?: $next($request);
}
В моей базе данных пароль был зашифрован с помощью bcrypt.
Мой вопрос: есть ли способ принудительного входа в систему? с моей собственной логикой?
Если я не шифрую пароль в базе данных, я могу сравнить $ data ['password'] с $ user_db-> password, используя:
if($data['password'] == hash("sha256", $user_db->password.$today, false))
Хорошо .. Спасибо всем!