首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Symfony 3[语义错误]身份验证

Symfony 3[语义错误]身份验证
EN

Stack Overflow用户
提问于 2017-04-12 02:24:17
回答 1查看 121关注 0票数 0

经过几个小时的搜索,我找不到我做错了什么,这是我的案例:

用户实体:

代码语言:javascript
复制
/**
 * Many users belongs to one group
 *
 * @ORM\ManyToOne(targetEntity="Group", inversedBy="users")
 * @ORM\JoinColumn(name="user_group", referencedColumnName="id")
 *
 */
private $group;

集团实体:

代码语言:javascript
复制
/**
 * One group has many users
 * 
 * @ORM\OneToMany(targetEntity="User", mappedBy="group")
 */
private $users;

public function __construct()
{
    $this->users = new ArrayCollection();
}

当访问者注册时,这是控制器中的方法:

代码语言:javascript
复制
/**
 *
 * @Route("/signup", name="signup")
 *
 */
public function signupAction(Request $request)
{

    $data = $request->request->all();
    $user = new User();
    $form = $this->createForm(SignupType::class, $user);
    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {

        // Create account
        $account = new Account();
        $account->getCreatedby($user);
        $account->setCreateddate(new \DateTime("now"));
        $account->setName($form['username']->getData());
        $account->setIsActive(true);

        $user->setAccount($account);    // relate this account to the user
        $user->setCreateddate(new \DateTime("now"));
        $user->setLocale('en'); // Assign the locale

        // Encoding the password
        $password = $this->get('security.password_encoder')
            ->encodePassword($user, $form['password']->getData());
        $user->setPassword($password);

        // Assign the group / role
        $group = $this->getDoctrine()->getRepository('AppBundle:Group')->findOneBy( array('name' => strtolower($form['user_type']->getData())) );
        //exit(\Doctrine\Common\Util\Debug::dump($group));
        $user->addGroup($group);

        // Persist objects to database
        $em = $this->getDoctrine()->getManager();
        $em->persist($account);
        $em->persist($user);
        $em->flush();

        return $this->render('default/show_message.html.twig', array(
            'alert_type' => 'success',
            'message' => 'You are registered',
            'redirect' => '',
        ));
    }

    return $this->render('security/signupForm.html.twig', array(
        'data' => $data,
        'form' => $form->createView(),
    ));

}

这几乎是完美的。数据库即会更新。但我注意到在user->group字段中有一个空。当我取消对转储的注释时,我看到了正确的组数据。

因此,当访问者尝试登录时,我会得到这样的日志:

代码语言:javascript
复制
[2017-04-11 20:04:41] request.INFO: Matched route "login". {"route":"login","route_parameters":{"_controller":"AppBundle\\Controller\\SecurityController::loginAction","_route":"login"},"request_uri":"http://test.com/app_dev.php/login","method":"POST"} []
[2017-04-11 20:04:41] security.INFO: Authentication request failed. {"exception":"[object] (Symfony\\Component\\Security\\Core\\Exception\\AuthenticationServiceException(code: 0): [Semantical Error] line 0, col 60 near 'g WHERE u.username': Error: Class AppBundle\\Entity\\User has no association named groups at C:\\xampp\\htdocs\\test_com\\vendor\\symfony\\symfony\\src\\Symfony\\Component\\Security\\Core\\Authentication\\Provider\\DaoAuthenticationProvider.php:94, Doctrine\\ORM\\Query\\QueryException(code: 0): [Semantical Error] line 0, col 60 near 'g WHERE u.username': Error: Class AppBundle\\Entity\\User has no association named groups at C:\\xampp\\htdocs\\test_com\\vendor\\doctrine\\orm\\lib\\Doctrine\\ORM\\Query\\QueryException.php:63, Doctrine\\ORM\\Query\\QueryException(code: 0): SELECT u, g FROM AppBundle\\Entity\\User u LEFT JOIN u.groups g WHERE u.username = :username OR u.email = :email at C:\\xampp\\htdocs\\test_com\\vendor\\doctrine\\orm\\lib\\Doctrine\\ORM\\Query\\QueryException.php:41)"} []
[2017-04-11 20:04:41] security.DEBUG: Authentication failure, redirect triggered. {"failure_path":"login_failure"} []

所以我确定我的group字段有问题,但是找不到。

有人来帮我吗?谢谢。

EN

回答 1

Stack Overflow用户

发布于 2017-04-12 03:51:47

User实体类中,更改

代码语言:javascript
复制
/**
 * Many users belongs to one group
 *
 * @ORM\ManyToOne(targetEntity="Group", inversedBy="users")
 * @ORM\JoinColumn(name="user_group", referencedColumnName="id")
 *
 */
private $group;

代码语言:javascript
复制
/**
 * Many users belongs to one group
 *
 * @ORM\ManyToOne(targetEntity="Group", inversedBy="users", cascade={"persist"})
 * @ORM\JoinColumn(name="user_group", referencedColumnName="id")
 *
 */
private $group;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43353564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档