Laravel’de başka kriterlere göre kullanıcıya giriş (login) yaptırma
PHP Laravel framework’ünün herhalde en sevdiğim özelliği “Şunu nasıl yaparız acaba?” sorusuna hemen her zaman çok basit bir cevabı olmasıdır. Bugün üzerinde çalıştığım projede klasik username / password ikilisine ek olarak başka bir şekilde daha kullanıcıya giriş yaptırmam icab edince (mesela email / password) bunu en pratik nasıl yaparım diye AuthManager’ima göz attım. Şöyle idi:
public function login(array $credentials){
if (!Auth::attempt($credentials)) {
throw new CustomException(__('The credentials are incorrect.'), 401);
}
$user = Auth::user();
Burada Laravel’in Auth::attempt() methodu işi hallediyor. Konu dışı olarak belirteyim; eğer kullanıcı bilgisi olarak username / password dışında üçüncü bir kriter -ek olarak- dahil olsun istiyorsanız bu kodu hiç değiştirmenize gerek kalmıyor. Mesela müşteri kodu da bu sorgulamaya girsin diyorsanız $credentials içerisinde “customer_id”=>123 gibi bir değer varsa otomatikmen Auth::attemt($credentials) bu üç kriteri sorguya sokuyor zaten.
Bizim problemimizde kullanıcı username ve password ikilisini giriyor sadece ama username yerine email de yazabilsin istiyoruz. Yani email için ayrı bir alan olmayacak.
İşte onun çözümü de gayet basit 🙂 Auth::attempt()’i bu kez email’i parametre olacak şekilde yazdığınızda ilk kriterden geçemezse ikinci kriteri deneterek Laravel’in mevcut yapısını bozmadan sorunu çözebiliyoruz.
public function login(array $credentials){
if (!Auth::attempt($credentials) && !Auth::attempt([
'email'=>$credentials['username'],
'password'=>$credentials['password']
])) {
throw new CustomException(__('The credentials are incorrect.'), 401);
}
$user = Auth::user();