Ich entwickle eine Symfony 3.3 Web App, die ein paar Pakete enthält.Symfony 3.3, Authentifizierung, bcrypt, schlechte Anmeldeinformationen
Ich versuche, einen Weg zu definieren, einen Admin-Benutzer in den Datenbanken wie folgt zu registrieren. Ich bin in der Lage, den Benutzer in der Datenbank zu erstellen, aber danach kann ich mich nicht als dieser Benutzer anmelden: Ich bekomme immer schlechte Anmeldeinformationen. Obwohl mir bewusst ist, dass Dinge besser arrangiert werden können, würde ich gerne verstehen, was ich nicht sehe.
So habe ich ein AdminBundle, darin habe ich eine User-Klasse definiert:
<?php
namespace myApp\AdminBundle\Entity;
use FOS\UserBundle\Model\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="fos_user")
*/
class User extends BaseUser
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
public function __construct()
{
parent::__construct();
}
}
?>
und registerAction
/**
* register main user/admin
*
* @Route("/register/{nameuser}", name="Jus_Admin_register")
* @Method("GET")
* @Template()
*/
public function registerAction($nameuser)
{
$user = new User();
$user->setUsername($nameuser);
$user->setEmail('[email protected]');
$plainPassword = 'pw';
$encoder = $this->get('security.encoder_factory')->getEncoder($user);
$encoded = $encoder->encodePassword($user, $plainPassword);
$user->setPassword($encoded);
$user->setEnabled(TRUE);
$user->setSuperAdmin(TRUE);
$userManager = $this->container->get('fos_user.user_manager');
$userManager->updateUser($user);
return $this->render('myAppAdminBundle:Admin:login.html.twig');
}
Mein security.yml hat:
security:
encoders:
myApp\AdminBundle\Entity\User:
algorithm: bcrypt
cost: 10
iterations: 1
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
providers:
our_db_provider:
entity:
class: myApp\AdminBundle\Entity\User
property: username
....
firewalls:
admin_area:
pattern: ^/myApp/Admin
anonymous: ~
form_login:
login_path: /myApp/Admin/login
check_path: /myApp/Admin/login_check
logout:
path: /myApp/Admin/logout
target: /myApp/Admin/admin
http_basic:
realm: "Admin reserved"
context: primary_auth
und meine config.yml hat (in der Tat bin ich mir nicht sicher, ob ich überhaupt folgendes brauche):
fos_user:
db_driver: orm # other valid values are 'mongodb' and 'couchdb'
firewall_name: admin_area
user_class: myApp\AdminBundle\Entity\User\
from_email:
address: "%mailer_user%"
sender_name: "%mailer_user%"
Wenn ich rufe http://localhost/myApp/Admin/register/admin
, wird die folgende Datensatz in die Tabelle fos_user eingefügt:
--
-- Dumping data for table `fos_user`
--
INSERT INTO `fos_user` (`id`, `username`, `username_canonical`, `email`, `email_canonical`, `enabled`, `salt`, `password`, `last_login`, `confirmation_token`, `password_requested_at`, `roles`) VALUES
(1, 'admin', 'admin', '[email protected]', '[email protected]', 1, NULL, '$2y........yq', NULL, NULL, NULL, 'a:1:{i:0;s:16:\"ROLE_SUPER_ADMIN\";}');
Ich bin jedoch nicht anmelden kann. Logs sagt:
[2017-08- .. ....] security.INFO: Authentifizierung Anfrage fehlgeschlagen. {"Ausnahme": "[Objekt] (Symfony \ Component \ Sicherheit \ Core \ Exception \ BadCredentialsException (Code: 0): Ungültige Anmeldeinformationen. at /..../vendor/symfony/symfony/src/Symfony/Component/Security /Core/Authentication/Provider/UserAuthenticationProvider.php:91, Symfony \ Component \ Sicherheit \ Core \ Exception \ BadCredentialsException (code: 0): Das angezeigte Passwort ist ungültig. At /..../vendor/symfony/symfony/ src/Symfony/Component/Sicherheit/Kern/Authentifizierung/Provider/DaoAuthenticationProvider.php: 67) "} []
danke, ich schätze Ihre Hilfe
ps. Meine App funktioniert ziemlich gut, wenn ich einen in_memory
Sicherheitsanbieter verwenden
Haben Sie versucht, 'sha512' Encoder? –