Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal,
Dando continuidade aos meus estudo com o Cake 2.0, fiz um sistema de login seguindo as instruções do
http://book.cakephp.org/2.0/en/
http://api20.cakephp.../auth-component
E está funcionando perfeitamente, como não fico feliz em estar pronto quero ir além.
Na tabela de usuários tenho três campos
[username]
[[senha]](mailto:)
Neste momento o meu cake está configurado para trabalhar com
'username' => 'email',
'password' => 'senha'
[Gostaria de dar ao usuário a opção de digitar no campo de usuário duas opções. Tanto o seu [username] quanto seu](mailto:).
Na query do mySQL ficando algo como
SELECT * FROM usuarios WHERE username OR email = [username-forncido-pelo-cake] AND senha = [password] LIMIT 0,1
Não encontrei nada semelhante na documentação.
Caso isso não possa ser um comportamento padrão do Cake pensei em fazer de duas formas
-
Opção
Fazer uma validação na hora em que recebe o valor do campo e se tiver '@' usa o campo email caso contrário usa o campo login.
Contra:
Mesmo sem conhecer o Cake parece ser muita gambiarra
-
Opção
Extender alguma classe do método principal e alterar o método do component que faz a validação no banco.
Contra:
Parece ser o mais certo, mas não faço idéia do que mexer e sei que posso fazer um senhor estrago alterando o Core, mesmo dentro da minha APP.
Eu não experimentei, mas e se você definir o Auth no AppController de um jeito e de outro no seu controller.
class AppController{
function beforeFilter(){
// definições do Auth
}
}
class UsuariosController{
function befireFilter(){
if($Se_o_cara_escolheu_usar_o_e-mail){
// redefine o auth
}else{
parent::befireFilter();
}
}
}
Ola Rafael.
sua query ficara semelhante a esta:
SELECT * FROM [tabela] WHERE username = [campo-login] AND senha = [senha] OR email = [campo-login] AND senha = [senha]