任何人都可以帮我找到一种可以在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行
由于
答案 0 :(得分:0)
正如您在Security chapter of Symfony's documentation中所读到的那样,您的用户概念是&#34;可以是任何东西,只要它实现UserInterface
。
换句话说,您的实体必须implement
UserInterface
,并且您必须实现接口定义的方法:
getUsername()
getPassword()
getSalt()
getRoles()
eraseCredentials()
如何调用您的用户名&#39;这并不重要。在内部(您可以将其称为username
,uid
,foobar
或其他),只要Symfony可以通过调用getUsername()
来获取它 - 并且只要您定义您security.yml
中的媒体资源名称。
密码也是如此:该属性不需要被称为password
。它可以是pass
,secret
,secretKey
或其他 - 只要getPassword()
方法返回它,因此Symfony可以将其与用户尝试登录的密码进行比较用。