2010-03-10 5 views
5

symgony1.4 및 doctrine1.2가 포함 된 webapp을 구축 중이며 sfDoctrineGuardPlugin을 사용하고 싶지만 약간의 문제가 있습니다.sfDoctrineGuardPlugin : 이메일 주소

sfDoctrineGuardPlugin은 사용자 이름으로 인증하도록 제작되었지만 전자 메일을 요청하려면 변경해야합니다.

어떻게해야할까요?

+0

충분히 간단해야합니다. 플러그인을 통해 'username'에 대한 검색을 시작하고 교체를 시작하십시오 :) – Raise

답변

4

기존의 사용자 이름 필드를 사용하면서 sfDoctrineGuard를 그대로 유지하면서 이메일을 저장하는 것은 어떻습니까? 그러면 사용자는 이메일로 로그인하게됩니다. 기본 필드 길이는 VARCHAR (128)이며 모든 전자 메일에 충분합니다. 내가 기억한다면 조심해야 할 것은 sfguard 가입, signin 등을위한 형태 라벨 (어디에서든지 그것을 표시)입니다. 기본적으로 "여기에 사용자 이름 입력"대신 "여기에 이메일 입력"이라고 말합니다.

유일한 단점은 sfGuardUser와 관련된 별도의 프로필에 '사용자 이름'을 잃어 버릴 수 있다는 것입니다.

그런 접근 방식이 마음에 들지 않는다면 sfDoctrineGuardPlugin 코드를 직접 조정할 수는 있지만 두통을 일으킬 수 있습니다.

+0

유효성 검사가 잘못되어 이름이 코드 전체에 잘못 표시 될 수 있습니다. 그렇게하지 않는 것이 좋습니다. – alcuadrado

+0

당신의 downvote는 정당화되지 않습니다. 사용자 정의 유효성 검사를 맨 위에 추가하여 유효성 검증을 매우 쉽게 대체 할 수 있습니다. 그리고 사용자 이름을 그대로 유지하고 싶다는 말은 결코하지 않았습니다. – Tom

5

질문을 올바르게 이해하고 있으면 전자 메일로 로그인 할 수 있습니다.

sfDoctrineGuardPlugin이 표에 따르면, 전자 메일 또는 사용자 이름을 사용하여 로그인을 지원하지만 버전 5.0.0이 분류됩니다

http://trac.symfony-project.org/ticket/8919

이 패치있다. 패치를 적용하고 true로 allow_login_with_email 당신의 app.yml 설정의 항목 작성 :

all: 
    sf_guard_plugin: 
    allow_login_with_email: true 

이 당신이 필요로하는 무엇입니까?

+0

이것은 실제로 작동하지 않는 것 같습니다. 또는 retrieveByUsername() 대신 retrieveByUsernameOrEmailAddress()를 사용하려면 유효성 검사기 클래스 중 하나에서 수동 변경이 필요합니다. 이상한, 당신의 대답이 아니라 심포니. – Tom

1

다른 사람이이 질문을 읽은 경우 도움을 얻기 위해이 답변을 드리겠습니다.

oznek이 지적했듯이 "allow_login_with_email"매개 변수를 사용해야합니다.

그러나 플러그인이 작동하지 않도록하는 버그가 있습니다 (적어도 버전 5.0.0 이상). /sfDoctrineGuardPlugin/lib/validator/sfGuardValidatorUser.class.php 라인 (44) 이 대체 :이와

$user = $this->getTable()->retrieveByUsername($username); 

을 : 이 파일을 수정해야

$user = $this->getTable()->$method($username); 

(이하 "$method"변수가 몇 줄 위에 정의되어 있지만 사용되지 않습니다)