在Symfony2中通过一个字段进行身份验证并确认

时间:2014-02-28 19:48:17

标签: php security symfony

我需要在其中一个项目中创建身份验证,但简单的登录/密码不适合。需要逐步认证:1' - 用户输入其电话号码 - 检查用户是否存在,然后通过电话发送短信并打开下一个表格,否则显示消息; 2'st - 带代码输入的表单,用户输入获得的代码 - 检查代码是否等于生成然后验证用户,否则再次发送。

作为样本我认为在自定义控制器中获取手机数据,如果用户查找显示他形成相似性:

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

但我不喜欢这个选项。也许有人会说出更漂亮的版本?)

2 个答案:

答案 0 :(得分:0)

我没有使用此解决方案,但我认为这可以帮助您

How to go back to referer after login failure?

此答案显示了如何在“登录失败”的情况下使用,但登录选项有一个“success_handler:some.service.id”。请查看以下网站,查看“app / config / security.yml”

的选项

http://symfony.com/doc/current/reference/configuration/security.html

祝你好运

答案 1 :(得分:0)

在这种情况下,您需要在security.yml中创建两个具有不同模式的防火墙:

firewall:
    phone:
       pattern: ^/phoneauth/login$
       form_login:
          provider: phone_auth_provider
          check_path: your_login_check_path
       context: same_unique_name
       ...
    code:
       pattern: ^/codeauth/login$
       form_login
          provider: code_auth_provider
          check_path: your_login_check_path
       context: same_unique_name
       ...

现在您需要创建两个自定义提供程序,一个用于 phoneauth ,另一个用于 codeauth phoneauth 中,您只需要创建一个查询来搜索电话号码,如果电话号码存在,它应该返回用户对象,否则请执行发送短信的过程并根据您返回的消息可以将其重定向到 codeauth 登录页面 在 codeauth 提供程序中,它与之前的提供程序有些类似,您可以创建查询以搜索输入的代码,如果找到它将返回用户对象。

有关更多帮助,请查看以下链接:

Authenticate someone with a custom entity provider
Multi firewall configuration in security.yml