sfDoctrineGuardPlugin: E-posta ile giriş

4 Cevap php

Ben symgony1.4 ve doctrine1.2 ile bir webapp inşa ediyorum ve ben sfDoctrineGuardPlugin kullanmak istiyor, ama ben küçük bir sorun var.

sfDoctrineGuardPlugin username tarafından kimlik doğrulaması için inşa, ama bir e-posta için sormak için değiştirmeniz gerekir.

Bunu nasıl herhangi bir fikir?

4 Cevap

http://bluehorn.co.nz/2009/06/12/symfony-12-propel-and-sfguardplugin-email-login/

Bu propel için yazılmış, ama muhtemelen doktrini ile kolayca uygulanabilir olmuştur.

Sorunuzu doğru anlama, size e-posta ile giriş izin vermek istiyorum.

sfDoctrineGuardPlugin e-posta veya kullanıcı adını kullanarak giriş destekler, ancak sürüm 5.0.0 bu bilet göre, kırık:

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

Orada bir yama vardır. Yamayı uygulayın ve true allow_login_with_email ayarını app.yml bir giriş oluşturmak:

all:
  sf_guard_plugin:
    allow_login_with_email: true

Bu ne ihtiyaç vardır?

Nasıl olduğu gibi, sfDoctrineGuard tutarak mevcut kullanıcı adı alanını kullanarak, ama içine e-postaları kaydetme hakkında. Kullanıcıların daha sonra e-posta ile giriş olacaktır. Varsayılan alan uzunluğu VARCHAR herhangi bir e-posta için bol (128). Eğer doğru hatırlıyorum, çimdik gerekiyordu tek şey sfguard kaydolma, imzalarkenki, vb (bunu görüntülemek yerde) için formu etikettir. Bu temelde sadece yerine "buraya adınızı girin" diyerek "burada e-posta girin" derdim.

Sadece olumsuz "username" kaybetmek olduğunu, ama her zaman sfGuardUser ile alakalı ayrı bir profil koymak olabilir.

Eğer bu yaklaşım beğenmezseniz, her zaman doğrudan sfDoctrineGuardPlugin kodunu çimdik, ancak muhtemelen bazı baş ağrısı neden oluyor.

Ben başkasının yardım arayan bu soruyu okuyunuz halinde bu cevap vereceğim.

Oznek işaret ettiği gibi, sen "allow_login_with_email" parametresini kullanmak zorunda.

However, there's a bug in the plugin (at least in version 5.0.0) that prevents it from working. You have to modify this file: /sfDoctrineGuardPlugin/lib/validator/sfGuardValidatorUser.class.php line 44 replace this:

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

Bu ile:

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

("$method" değişkeni üzerinde birkaç satır tanımlanmış, ama asla kullanılır)