Это еще одна проблема с вашим кодом - вы ничего не делаете с предоставленными именем пользователя и паролем.Вам нужно добавить предложение where в ваш оператор SQL, так:
my $sql = 'SELECT * FROM users WHERE username = ? AND password = ? ';
my $sth = $dbh->prepare($sql);
$sth->execute($username, $password);
Однако, учитывая, что в вашем примере выбираются все записи из таблицы 'users', я бы подумал, что credentials ()по крайней мере, возвращать несколько строк.Тем не менее, я боюсь, что я не использовал Frontier :: Daemon в прошлом, поэтому я не могу помочь на этом фронте.
Я также не вижу, как этот код будет работать, если вы используете ограничения.$ dbh, $ sql, $ sth и $ login_response не были объявлены.Поэтому убедитесь, что вы используете «мой» в нужных местах - как в моем примере выше.
Чтобы исправить проблемы, о которых вы упоминали, возвращая правильную строку - логика в вашем выражении if не совсем верна.Вы возвращаете строку «Вход успешен», если есть успешный вход в систему, и хэш-адрес {login => $ login_response}, когда ни один пользователь не может быть найден.
Я думаю, что путаница возникла из-за расположения фигурных скобок.Я должен подчеркнуть, что вы пытаетесь правильно сделать отступ в своем коде, что сделает его более читабельным для вас и других разработчиков при отладке и обслуживании кода в будущем.
Следующая логика должна делать эту работу.
if($sth->rows > 0){
return "Login Successful";
}
return "Invalid Credentials";