Я новичок в системе аутентификации пользователей Symfony 4 и все еще работаю над тем, чтобы обернуть голову вокруг нее.У меня есть интерфейс, который я создаю в VueJS, и я могу зарегистрировать новых пользователей через Symfony, и они прекрасно сохраняются в базе данных.
Однако я не могу использовать аутентификатор AJAX JSON.Каждая попытка, которую я делаю, говорит: «{error:« Invalid Credentials »}. Обычно довольно легко устранять проблемы Symfony, но, поскольку это AJAX, я не могу легко это устранить. Я начинаю думать, что что-то упустилс "солью" в моем пользовательском объекте, так как я солю паролей. Любые идеи?
Мой запрос AXIOS на веб-интерфейсе:
axios.post('/auth/login', {username: this.username, password: this.password})
.then(function(response) {
console.log(response);
});
config / packages / security.yaml
security:
encoders:
App\Entity\User:
algorithm: argon2i
cost: 12
# https://symfony.com/doc/current/security.html#where-do-users-come-from-user-providers
providers:
# in_memory: { memory: ~ }
our_db_provider:
entity:
class: App\Entity\User
# the property to query by - e.g. username, email, etc
property: username
# if you're using multiple entity managers
# manager_name: customer
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
# json_login:
# check_path: /auth/login
# provider: our_db_provider
main:
anonymous: true
json_login:
check_path: /auth/login
provider: our_db_provider
А вот мой UserEntity.php:
<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\User\UserInterface;
/**
* @ORM\Entity(repositoryClass="App\Repository\UserRepository")
* @ORM\HasLifecycleCallbacks()
*/
class User implements UserInterface, \Serializable
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=254)
*/
private $username;
/**
* @ORM\Column(type="string", length=128)
*/
private $password;
/**
* @ORM\Column(type="boolean")
*/
private $isActive;
/**
* @ORM\Column(type="json_array", nullable=true)
*/
private $roles;
/**
* @ORM\Column(type="string", length=64)
*/
private $firstName;
/**
* @ORM\Column(type="string", length=64)
*/
private $lastName;
/**
* @ORM\Column(type="datetime")
*/
private $createdAt;
/**
* @ORM\PrePersist
*/
public function setCreatedAtValue()
{
$this->createdAt = new \DateTime();
}
public function eraseCredentials()
{
}
/** @see \Serializable::serialize() */
public function serialize()
{
return serialize(array(
$this->id,
$this->username,
$this->password,
$this->firstName,
$this->lastName,
$this->createdAt,
$this->isActive
// see section on salt below
// $this->salt,
));
}
/** @see \Serializable::unserialize() */
public function unserialize($serialized)
{
list (
$this->id,
$this->username,
$this->password,
$this->firstName,
$this->lastName,
$this->createdAt,
$this->isActive
// see section on salt below
// $this->salt
) = unserialize($serialized, array('allowed_classes' => false));
}
public function getId(): ?int
{
return $this->id;
}
public function getUsername(): ?string
{
return $this->username;
}
public function setUsername(string $username): self
{
$this->username = $username;
return $this;
}
public function getPassword(): ?string
{
return $this->password;
}
public function setPassword(string $password): self
{
$this->password = $password;
return $this;
}
public function getIsActive(): ?bool
{
return $this->isActive;
}
public function setIsActive(bool $isActive): self
{
$this->isActive = $isActive;
return $this;
}
public function getRoles() : array
{
return $this->roles;
}
public function setRoles(array $roles): self
{
$this->roles = $roles;
return $this;
}
public function getSalt()
{
// you *may* need a real salt depending on your encoder
// see section on salt below
return null;
}
public function getFirstName(): ?string
{
return $this->firstName;
}
public function setFirstName(string $firstName): self
{
$this->firstName = $firstName;
return $this;
}
public function getLastName(): ?string
{
return $this->lastName;
}
public function setLastName(string $lastName): self
{
$this->lastName = $lastName;
return $this;
}
public function getCreatedAt(): ?\DateTimeInterface
{
return $this->createdAt;
}
public function setCreatedAt(\DateTimeInterface $createdAt): self
{
$this->createdAt = $createdAt;
return $this;
}
}
Я не уверен, что лучший способ - это устранить неполадки при входе в AJAX, как это, поскольку все это делается заСцена вроде «волшебства» (как они описывают это в документации).