Symfony2的。从数据库问题加载安全用户

时间:2014-05-14 11:36:02

标签: security symfony login

任何人都可以帮我找到一种可以在Symfony2项目中使用登录功能的方法吗?关键是我需要使用数据库和symfony的安全捆绑包,但我没有昵称和密码字段。我确实有uid并通过,但我无法弄清楚如何让它工作。

我发现的所有教程都包含security.yml的这种代码

providers:
    user_db:
        entity: { class: Acme\StudentBundle\Entity\User, property: nickname  }

是这段代码:

providers:
    user_db:
        entity: { class: Acme\StudentBundle\Entity\Profile, property: uid  }

错误?

我使用的表格:

{% if error %}
    <div>{{ error.message }}</div>
{% endif %}

<form action="{{ path('login_check') }}" method="post">
    <label for="username">User:</label>
    <input id="username" type="text" name="_username" value="{{ last_username }}" />
    <label for="password">Password:</label>
    <input id="password" type="password" name="_password" /> <input type="submit" name="login" />
</form>

我遇到的错误是

ContextErrorException:Catchable Fatal Error:类Proxies__CG __ \ Acme \ StudentsManagerBundle \ Entity \ Student的对象无法转换为C:\ xampp \ htdocs \ symfony.localhost \ Symfony \ vendor \ symfony \ symfony \ src \ Symfony中的字符串\ Component \ Security \ Http \ Firewall \ AbstractAuthenticationListener.php第215行

由于

1 个答案:

答案 0 :(得分:0)

不,这没关系

正如您在Security chapter of Symfony's documentation中所读到的那样,您的用户概念是&#34;可以是任何东西,只要它实现UserInterface

换句话说,您的实体必须implement UserInterface,并且您必须实现接口定义的方法:

  • getUsername()
  • getPassword()
  • getSalt()
  • getRoles()
  • eraseCredentials()

如何调用您的用户名&#39;这并不重要。在内部(您可以将其称为usernameuidfoobar或其他),只要Symfony可以通过调用getUsername()来获取它 - 并且只要您定义您security.yml中的媒体资源名称。

密码也是如此:该属性不需要被称为password。它可以是passsecretsecretKey或其他 - 只要getPassword()方法返回它,因此Symfony可以将其与用户尝试登录的密码进行比较用。