![](/img/trans.png)
[英]Symfony doctrine repository (findOneBy) result is not object
[英]Can I get a user by their username and password using Doctrine (findOneBy()) on Symfony 4?
我希望在Symfony4上使用Doctrine( findOneBy()
方法)通過用戶名和密碼獲取用戶。
security:
encoders:
App\Entity\User:
algorithm: argon2i
$username= $request->request->get('username');
$password = $request->request->get('password');
$user= $this->em->getRepository(User::class)->findOneBy([
'username'=>$username,
'passsword'=>$password
]);
return new Response($user);
執行此操作的正確方法是通過用戶名獲取用戶,然后使用Symfony的密碼編碼器驗證密碼。
例如:
public function __construct(UserPasswordEncoderInterface $encoder) {
$this->encoder = $encoder;
}
public function yourAction(Request $request) {
$username = $request->request->get('username');
$password = $request->request->get('password');
$user = $this->em->getRepository(User::class)->findOneBy(['username'=>$username]);
if ($user === null) {
// user not found
// throw exception or return error or however you handle it
}
if (! $this->encoder->isPasswordValid($user, $password)) {
// invalid password
// throw exception, or return error, or however you handle it
}
//...
}
請記住,您需要添加use Symfony\\Component\\Security\\Core\\Encoder\\UserPasswordEncoderInterface;
腳本頂部的語句。
從技術上講,如果您知道用戶名和密碼(哈希),就可以找到用戶。
但是,由於散列通常使用隨機鹽,因此無法通過用戶名和純文本密碼找到用戶。
這里干凈的方法是通過用戶名獲取用戶並檢查密碼(通過password_verify或symfony版本 (或參見yivi的答案 ))。
我想要通過多個標准,你必須使用“findBy”方法
$username= $request->request->get('username');
$password = $request->request->get('password');
$user= $this->em->getRepository(User::class)->findBy(
[
'username' => $username,
'password'=> $password
],
[],
1
);
return new Response($user);
您可以在存儲庫(App / Repository / UserRepository.php)中創建一個新方法,您也可以在其中提供用戶名和密碼並發回結果。
public function getUserByUsernameAndPassword(string $username, string $password)
{
$qb = $this->createQueryBuilder('u')
->andWhere('u.username = :username')
->andWhere('u.password LIKE :password')
->setParameter('username', $username )
->setParameter('password', $password )
->getQuery();
return $qb->getResult();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.