2014-02-28 26 views
0

我需要創建身份驗證項目之一,但簡單的登錄名/密碼不適合。需要逐步驗證:1'st - 用戶輸入其電話號碼 - 檢查用戶是否存在,然後電話發送短信並打開下一個表格,否則顯示消息; 2'st - 輸入代碼,用戶輸入獲得的代碼 - 檢查代碼是否等於生成,然後驗證用戶,否則再次發送。驗證一個字段與確認在Symfony2

作爲樣品我想在定製控制器獲得手機數據,如果用戶瑤池顯示他形成的相似:

<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> 

但我不喜歡這個選項。也許有人說更漂亮的版本?)

回答

0

我這種情況下,你需要創建兩個防火牆與安全不同的模式。陽明:

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 
     ... 

現在,您需要創建兩個自定義提供,一個用於手機驗證,另一個用於codeauthphoneauth你只需要創建一個查詢來搜索電話號碼,如果電話號碼存在,它應該返回用戶對象,否則做你的發送短信的過程,並根據你的消息,你返回你可以重定向到codeauth登錄頁面。
codeauth供應商有點類似於以前的供應商,你可以創建查詢來搜索輸入的代碼,如果發現它會返回用戶對象。

更多幫助下面的鏈接查看:

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

+0

賈瓦德,我創建phone_auth_provider和code_auth_provider,code_auth_provider - 空類實現UserProviderInterface,並在phone_auth_provider loadUserByUserName我寫的查詢來查找電話號碼的用戶並返回他,如果finded,但我總是有錯誤信息「Bad credentials」...我做錯了什麼? –

+1

首先,確保'loadUserByUserName'返回用戶對象,您可以在返回之前var_dump返回的變量,如果它是用戶對象,則表示第一步正確完成。下一步是創建有點困難的定製認證;因爲你不會認證密碼的用戶羣(在你的情況下沒有密碼) – Javad

+0

我不太瞭解你,類User的loadUserByUserName對象,但我不明白我應該在哪裏返回響應對象表單代碼條目。感謝您的幫助)) –

相關問題