您好我从数据库加载用户。 (不使用FOSUserBundle或Grant) 我使用Symfony 3 documentation中的实体提供程序方法 但我遇到了一个问题。一切正常,我可以登录但是当我尝试使用错误的用户名登录时,我得到了这个相当不合理的错误
由于系统问题,无法处理身份验证请求。
开发人员不清楚并且引起普通用户的总体恐慌,因此我必须找到一种方法来替换这种方式,而不仅仅是一些非常好的东西。
我试图在UserRepostory中抛出UserNameNotFoundException或BadCredentialsException,它没有效果。
有没有办法可以改进这个或者我应该放弃这种方法并使用UserProvider和服务方法吗?
PS:我还想改进BadCrentials消息。
UserRepository:
<?php
// src/AppBundle/Entity/UserRepository.php
namespace AppBundle\Entity ;
use Symfony\Bridge\Doctrine\Security\User\UserLoaderInterface ;
use Symfony\Component\Security\Core\User\UserInterface ;
use Symfony\Component\Security\Core\Exception\UsernameNotFoundException ;
use Doctrine\ORM\EntityRepository ;
class UserRepository extends EntityRepository implements UserLoaderInterface {
public function loadUserByUsername($username)
{
$user = $this->createQueryBuilder('u')
->where('u.username = :username OR u.email = :email')
->setParameter('username', $username)
->setParameter('email', $username)
->getQuery()
->getOneOrNullResult();
if($user === null){
throw new UsernameNotFoundException("You provided a wrong username");
}
return $user;
}
}
?>
在security.yml中:
ordinary_users
entity:
class: AppBundle:OrdinaryUser
控制器:
class securityController extends Controller {
/**
* @Route("/account/signin", name="signin_form")
* @Template("AppBundle:security:signin.html.twig")
*/
public function signinAction(Request $request)
{
$this->get('logger')->info("called secureLoginAction");
$session = $request->getSession();
//gets the login error is there is one
if($request->attributes->get(Security::AUTHENTICATION_ERROR)){
$error = $request->attributes->get(
Security::AUTHENTICATION_ERROR
);
} else {
$error = $session->get(Security::AUTHENTICATION_ERROR);
$session->remove(Security::AUTHENTICATION_ERROR);
}
return array(
'last_username' => $session->get(Security::LAST_USERNAME),
'error' => $error
);
}
... goes on nothing special all like in the example.
我不包含相当长的OrdinaryUser实体,但它是标准的AdvancedUserInterface实现。
那么我该如何解决这个问题呢? (在它修复之后我想把它翻译成一个ajax登录,但以后就可以了。)