2015-02-03 3 views
0

사용자 인증 공급자 (Custom Password Authenticator 기준)를 구현했으며 loadUserByUsername (email) 메서드가 하나의 매개 변수 만 허용한다는 점이 다릅니다. 클라이언트가 하나의 전자 메일 주소로 여러 회사에 등록 될 수 있기 때문에이 사용자가 회사 ID (url 매개 변수에서 가져온 것)에 속하는지 여부를 확인하기 위해 추가로 하나씩 필요합니다.symfony2에서 추가 매개 변수가있는 loadUserByUsername

어떻게하면됩니까?

답변

3

loadUserByUsernameUserProviderInterface에 선언 된 메소드의 구현이므로 PHP는이 경우 오류가 발생하기 때문에 인수 목록을 변경할 수 없습니다.

  1. (비트 hackish) username하고 확인해야 ID를 포함 loadUserByUsername 패스 배열의 구현에 : 나는 두 가지 솔루션을 참조하십시오. php가 강력하게 타입 화되지 않았기 때문에 문자열 (사용자 이름) 대신에 배열을 loadUserByUsername 메쏘드에 전달할 수 있기 때문에 이것은 조금 hackish하다.

    public function loadUserByUsername($params) 
    { 
        $id = $params['id']; 
        $username = $params['username']; 
        //now do whatever you need to do with $id and $username 
    } 
    
  2. ID가 확인하는 경우, 그냥 username 매개 변수와 함께 일반 loadUserByUsername 메소드를 호출 그렇다면, 확인합니다 (usernameID의)과 첫 번째 단계에서 배열을 취할 것입니다 자신의 loadUserByParams 방법을 쓰기

    public function loadUserByParams($id, $username) 
    { 
        //check if $id is ok; 
        if ($id_is_ok) { 
         return $this->loadUserByUsername($username); 
        } 
    } 
    
+0

의견을 보내 주셔서 감사합니다.하지만 refreshUser() 메소드의 경우에는 어떻게해야합니까? 이 메서드는 여전히 loadUserByUsername을 호출해야하며 거기에 추가 인수를 전달하는 방법을 알지 못합니다. – undefinedman

+0

''refreshUser''는''UserInterface'' 유형의 인수 하나를 허용합니다. 내부적으로''refreshUser'' 메쏘드 구현을 작성하고''loadUserByParams''를 호출 할 수 있습니다 - 주석에 답하기 :''refreshUser'' 메쏘드는''loadUserByUsername'' 메쏘드를 호출 할 필요가 없습니다 –

+0

모든 것은 괜찮은 것처럼 들리지만 여전히 내 생각에 내부적으로 호출되었으므로 refreshUser 메서드를 호출 해야할지 모르겠습니다. SimpleFormAuthenticatorInterface의 authenticateToken() 메서드 내에서 loadUserByUsername으로 원하는 모든 작업을 수행 할 수 있기 때문에 loadUserByParams() 메서드를 호출 할 수있는 것처럼 refreshUser를 호출하는 방법을 여전히 알지 못합니다. – undefinedman

관련 문제