2010-03-10 29 views
5

Tôi đang xây dựng một ứng dụng web với symgony1.4 và doctrine1.2, và tôi muốn sử dụng sfDoctrineGuardPlugin, nhưng tôi có một vấn đề nhỏ.sfDoctrineGuardPlugin: đăng nhập với email

sfDoctrineGuardPlugin được xây dựng để xác thực bằng tên người dùng, nhưng tôi cần phải thay đổi nó để yêu cầu một email.

Bất kỳ ý tưởng nào về cách thực hiện?

+0

Nó phải đủ đơn giản. Bắt đầu với tìm kiếm thông qua plugin cho 'tên người dùng' và bắt đầu thay thế :) – Raise

Trả lời

4

Làm thế nào về việc giữ gìn sfDoctrineGuard như nó có, sử dụng các lĩnh vực tên người dùng hiện, nhưng tiết kiệm email vào nó. Sau đó, người dùng của bạn sẽ đăng nhập bằng email của họ. Độ dài trường mặc định là VARCHAR (128) rất nhiều cho bất kỳ email nào. Nếu tôi nhớ không nhầm, điều duy nhất bạn cần phải tinh chỉnh là nhãn thức cho đăng ký sfguard, đăng nhập, vv (mọi lúc mọi nơi hiển thị nó). Về cơ bản, bạn chỉ cần nói "Nhập email tại đây" thay vì nói "Nhập tên người dùng ở đây".

Nhược điểm duy nhất là bạn mất "tên người dùng", nhưng bạn luôn có thể đặt điều đó trong một cấu hình riêng có liên quan đến sfGuardUser.

Nếu bạn không thích cách tiếp cận đó, bạn luôn có thể chỉnh sửa mã sfDoctrineGuardPlugin trực tiếp, nhưng có thể nó sẽ gây ra một số nhức đầu.

+0

Xác thực sẽ sai và tên cũng sẽ sai trên tất cả mã ... Tôi không muốn làm điều đó. – alcuadrado

+0

Yêu cầu của bạn không được chứng minh. Bạn có thể ghi đè xác thực rất dễ dàng bằng cách thêm xác thực tùy chỉnh ở trên cùng. Và bạn không bao giờ chỉ định bạn muốn giữ nguyên tên người dùng. – Tom

5

Nếu tôi hiểu câu hỏi của bạn một cách chính xác, bạn muốn cho phép đăng nhập bằng e-mail.

sfDoctrineGuardPlugin hỗ trợ đăng nhập bằng e-mail hoặc tên đăng nhập, nhưng trong phiên bản 5.0.0 bị hỏng, theo vé này:

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

Có một bản vá đó. Áp dụng bản vá và tạo mục nhập trong cài đặt app.yml của bạn allow_login_with_email thành true:

all: 
    sf_guard_plugin: 
    allow_login_with_email: true 

Đây có phải là những gì bạn cần không?

+0

Điều này dường như không thực sự hoạt động, hoặc, bạn cần điều này cộng với thay đổi thủ công trong một trong các lớp trình xác thực để sử dụng retrieveByUsernameOrEmailAddress() thay cho retrieveByUsername(). Lạ, không phải câu trả lời của bạn mà là Symfony. – Tom

1

Tôi sẽ trả lời câu hỏi này trong trường hợp ai đó đọc câu hỏi này đang tìm kiếm trợ giúp.

Như oznek đã chỉ ra, bạn phải sử dụng thông số "allow_login_with_email".

Tuy nhiên, có lỗi trong plugin (ít nhất là trong phiên bản 5.0.0) để ngăn lỗi hoạt động. Bạn phải thay đổi tập tin này: /sfDoctrineGuardPlugin/lib/validator/sfGuardValidatorUser.class.php dòng 44 thay thế này:

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

với điều này:

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

(các "$method" biến được định nghĩa một vài dòng trên, nhưng không bao giờ sử dụng)

Các vấn đề liên quan