Laravel Authentication İşlemi

Laravel Authentication İşlemi

Hepinize merhaba dostlarım 😊 Yaklaşan bir pazar gününe yine yeni bir makle ile girmek için tekrardan karşınızdayım. Biliyorsunuz sürekli olarak vue ile ilgili makaleler yazıyordum. Yanlış anlamayın gına geldi vb gibi bir durum asla ama asla olmadı bende 😅. Uzun süredir laravel konusuna ara verdiğimi ve laravelde en önemli işlemi daha hala ele almadığımı gördüm. Şimdi sizlerin aklında şu olacaktır ben bunun farkındayım

Hocam uzun süredir Laravel ile işlem yapıyoruz ama bu hangi işlem çok merak ettik 😊

Aslında bu makalemin başlığını Laravel kategorisinde az biraz göz gezdirirseniz hemen kapacaksınız dostlarım 😅. O kadar süredir Laravel konusu yazarken hiç Authentication işlemleri gerçekleştirmedik. Yani panelimize herhangi bir giriş çıkış sistemi koymadık. Şimdi içinizden bazı arkadaşlar denemiş ise şunu kesin söyleyecektir

Hocam aman jetstream gibi breeze gibi karmaşık yapılar vs değildir inşaAllah öyle olmasın ya

şeklinde içinizden de söyleniyorsunuzdur ben biliyorum. Özellikle bu bahsettiğiniz yapıları Laravel öğrenme sırasında deneyip projelerimin birkaçını patlattığımı biliyorum 😁.

O halde hiç zaman kaybetmeden dostlarım hemen kodlama kısmımıza geçelim

Authentication İşlemine Geçelim

Eveeeeet dostlarım artık laravel projenizi hızlıca oluşturuyorsunuz buna ben bizzat şahidim 😊. Şimdi ise artık yapmanız gereken tek şey benimle beraber adımları ayarlamak. Öncelikle terminal ekranımıza gelip

 php artisan make:controller admin/login/indexController

şeklinde komutumuzu yazdık dostlarım. Burası Login, Logout kodlarımızın olacağı yer. Bu controller dosyamızı oluşturduktan sonra ise dostlarım bir de admin home sayfamızın controller kısmını ayarlayalım. Hemen terminalimize gelip

 php artisan make:controller admin/home/indexController

şeklinde komutumuzu yazalım dostlarım. Bu kısma kadar tamamız. Daha sonrasında .env dosyamızın içerisine gelip

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=admin_auth
DB_USERNAME=root
DB_PASSWORD=

kısmından database ayarlamalarını yapalım. Database ayarlamalarını da tyaptıktan sonra dostlarım terminalimize gelip

php artisan migrate

komutumuzu da yazalım ki User tablomuz sisteme bi dahil olsun. Çünkü olmayan veri ile nasıl giriş yapacağız değil mi mantıksız olur 😅.

Bu komutumuzu da yazdıktan sonra users tablomuzda (MySQL üzerinden) name kısmına

Admin

yazalım, email alanına örnek olarak

deneme@hotmail.com

yazalım. Şifre alanına ise Bu Siteden istediğimiz şifreyi verelim. 8 Haneli olsun ama güvenlik için 😊. Daha sonra oluşturduğumuz şifreyi Encrypt butonuna basarak şifrelenmiş olanı alalım. Örnek olarak şimdilik şifremiz

12345678

 olsun. Bunun şifrelenmiş hali

$2a$12$TFDQi.cqYHM0AyvDpCQLMOvnNtUSnzQ4YJM4rWNwBNunjtNYtLA0i

şeklinde olacaktır. Bu kısmı da ayarladıktan sonra dostlarım User model dosyası içerisine gelip

<?php

public function getAuthPassword()
    {
        return $this->password;
    }

kodumuzu yazalım. Burada dedik ki yazılıma aslında

Dostum sen users tablosunu baz alarak işlem yapacağında bu tablonun password kolonunu baz alarak işlem yap

şeklinde komutumuzu belirttik. Bu kısmı yazdıktan sonra dostlarım artık gelelim yavaştan kodlama işlemimizi gerçekleştirmeye

Öncelikle views klasörümüzün altında admin isminde bir klasör açalım. Daha sonra içerisinde home ve login adında 2 klasör dah açalım.

Home klasörünün içerisine index.blade.php açalım ve daha sonra içerisine

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Admin Paneli | MFSoftware Blog</title>
</head>
<body>
    @if(session('basarili'))
        <small style="color: green; font-weight: bold;">{{ session('basarili') }}</small>
    @endif
    <br>
    <p>Hoşgeldiniz: {{ \Illuminate\Support\Facades\Auth::user()->name }}</p>
    <p>
        <a href="{{ route('login.logout') }}">Çıkış Yap</a>
    </p>
</body>
</html>

şeklinde kodlarımızı yazalım. Daha sonrasında ise dostlarım login klasörü içinde de index.blade.php oluşturalım. Daha sonra bunun içerisine de

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Admin Giriş | MFSoftware Blog</title>
</head>
<body>
    @if(session('hata'))
        <small style="color: red; font-weight: bold;">{{ session('hata') }}</small>
        <br><br>
    @endif

    @if(session('basarili'))
        <small style="color: green; font-weight: bold;">{{ session('basarili') }}</small>
        <br><br>
    @endif
    <form action="{{ route('login.do_login') }}" method="POST">
        @csrf
        <label for="">E-Mail Adresiniz</label>
        <br>
        <input type="text" name="email" required>
        <br><br>
        <label for="">Şifreniz</label>
        <br>
        <input type="password" name="password" required>
        <br><br>
        <button type="submit">Giriş Yap</button>
    </form>
</body>
</html>

şeklinde kodlarımızı yazalım. Bu kodlarımızı yazdıktan sonra ise dostlarım admin/login/indexController.php dosyamıza aşağıdaki kodlarımızı yazalım

<?php

namespace App\Http\Controllers\admin\login;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class indexController extends Controller
{
    public function __construct()
    {
        $this->middleware('guest')->except("logout");  // ADMIN GİRİŞİ VARSA LOGOUT HARICINDEKI METHODLARA ISTEK ATILINCA PANELE YONLENDİR DEDİK
    }

    public function index(){
        return view('admin.login.index');
    }

    public function do_login(Request $request){
        $data = $request->except("_token");

        $credentials = [
            "email" => $data['email'],
            "password" => $data['password'],
        ];

        if (Auth::attempt($credentials)){
            $request->session()->regenerate();
            return redirect()->route('admin.index')->with("basarili","Giriş İşlemi Başarılı");
        }else{
            return redirect()->route('login.index')->with("hata","E-Mail Adresiniz ve/veya Şifreniz Hatalı");
        }
    }

    public function logout(Request $request){
        Auth::logout();
        $request->session()->flush();
        $request->session()->regenerate();

        return redirect()->route('login.index')->with("basarili","Çıkış İşlemi Başarılı");
    }
}

kodlarımızı yazdık. Daha sonrasında ise dostlarım gelelim admin/home/indexController.php dosyamıza. Burada aslında yapacağımız pek fazla bir ayar yok sadece view bastıracağız

<?php

namespace App\Http\Controllers\admin\home;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

class indexController extends Controller
{
    public function index(){
        return view('admin.home.index');
    }
}

şeklinde kodlarımızı yazdık dostlarım. Şimdi diyorsunuzdur içinizden dostlarım ben seziyorum

Hocam login kodlarında admin girişi varsa tekrar gelmemesi için kod yazdık. İyi güzel de admin kısmı için yazmadık bunu onu nerede yapacağız ?

çok güzel bir kısma değindiniz dostlarım. Özellikle öğrenme süreci içerisinde bu şekilde sorularınızı bana yöneltmeniz inanılmaz mutlu ediyor beni. Şimdi o kısmı da hızlıca ayarlayalım. Hemen web.php kısmına gelelim ve

<?php
use Illuminate\Support\Facades\Route;

/** LOGIN KISMI **/
Route::group(['prefix'=>'login','as'=>'login.'],function (){
    Route::get('',[\App\Http\Controllers\admin\login\indexController::class,'index'])->name('index');
    Route::post('do-login',[\App\Http\Controllers\admin\login\indexController::class,'do_login'])->name('do_login');
    Route::get('logout',[\App\Http\Controllers\admin\login\indexController::class,'logout'])->name('logout');
});

/** ADMIN KISMI **/                                         // GİRİŞ YÖNETİMİ İÇİN AUTH MIDDLEWARESINI KULLANDIK
Route::group(['prefix'=>'admin','as'=>'admin.','middleware'=>'auth'],function (){
    Route::get('',[\App\Http\Controllers\admin\home\indexController::class,'index'])->name('index');
});

şeklinde kodlarımızı yazdık. İşimiz bitti mi diye soracak olursanız

HENÜZ BİTMEDİ !!!

bu kısımda şimdi hani biz Middleware ile ara katman ayarlaması gerçekleştirdik ya işte bunları Laravel tarafından default olarak gelen rotasyonlar olmadığı için değiştirmemiz gerekecek. Hemen bunları ayarlayalım o halde

Öncelikle app/Http/Middleware/Authenticate.php dosyasına gelip

<?php

namespace App\Http\Middleware;

use Illuminate\Auth\Middleware\Authenticate as Middleware;

class Authenticate extends Middleware
{
    /**
     * Get the path the user should be redirected to when they are not authenticated.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return string|null
     */
    protected function redirectTo($request)
    {
        if (! $request->expectsJson()) {
//            return route('login');
            return route('login.index');     // bu rotayı ayarladık
        }
    }
}

şeklinde düzeltme gerçekleştirelim. Bu kısmı ayarladıktan sonra ise yine aynı klasör içerisindeki RedirectIfAuthenticated.php dosyası içeriğinden

<?php

namespace App\Http\Middleware;

use App\Providers\RouteServiceProvider;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class RedirectIfAuthenticated
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse)  $next
     * @param  string|null  ...$guards
     * @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
     */
    public function handle(Request $request, Closure $next, ...$guards)
    {
        $guards = empty($guards) ? [null] : $guards;

        foreach ($guards as $guard) {
            if (Auth::guard($guard)->check()) {
//                return redirect(RouteServiceProvider::HOME);
                return redirect()->route('admin.index');  // bu kısmı ayarladık
            }
        }

        return $next($request);
    }
}

şeklinde ayarlamaları gerçekleştirelim. Bu kısmı da ayarladıktan sonra ise dostlarım artık işlemler tamamlanmıştır. Bu yapıya bir tema entegre ederek istediğiniz şekilde kullanabilirsiniz. Her şey tamamen size bağlı 😊

Eveeeet dostlarım. Bu makalemde sizler elimden geldiğince dilim döndüğünce "Laravel Authentication İşlemi" konusunu elimden geldiğince dilim döndüğünce anlatmaya çalıştım. Umarım faydalı olmuşumdur. Eksik vey hatalı bir anlatım yapmış isem benimle iletişime geçmekten çekinmeyin 😊. Konu başlarda biraz karmaşık veya zor gelebilir dostlarım anlıyorum. Özellikle öğrenme sürecinde bu gibi durumların olması son derece doğaldır. Bu süreç içerisinde sizlerden istediğim tek şey her yazımda da dediğim gibi "İstikrarlı ve azimli olmalısınız, Bolca pratik yapmalısınız 😊". Bu dediklerimi hayat felsefeniz yaptığınız sürece başarı sizler için kaçınılmaz olacaktır.

Aynı zamanda 25 Aralık 2022 de kurmuş olduğum seyyaryazilimci.com soru cevap sitesi de yayında dostlarım haberiniz olsun. Her zaman dediğim gibi sorular ve cevaplar belirli bir süre admin onayından geçerek sistem üzerinde yayınlanmaktadır dostlarım bilginiz olsun.

 

Hayallerinizi gerçekleştirmeniz ve güzel yerlere gelmeniz dileklerimle... İyi çalışmalar dilerim 😊

Muhammed Fatih BAĞCIVAN
Yazar Hakkında

Kendi Halinde Bir Backend Developer

Önceki YazıAPI (Application Programming Interface) Nedir ?
Sonraki YazıVue.js Array Data Bindings İşlemi
Yorumlar (0)
Bu Yazıya Ait Hiçbir Yorum Bulunamadı (veya admin onaylamadı). İlk Yorum Yapan Sen Ol
Yorum Yapabilirsiniz