Giriş yapmadınız.

#1 04.04.2019 20:28:32

ykulac
Üye
Kayıtlı: 28.01.2019
Mesajlar: 11

login işlemi

merhaba.
mevcut çalışan bir sistemi laravele geçirmeye çalışıyorum.
mevcut sistemde iki çeşit kullanıcı var.
ikiside ayrı tablolardan kontrol ediliyor. bir tanesi site yönetim yani admin tablosu.
diğeri normal üye tablosu.
yani bir tablo ve bu tabloda yetkilendirme işlemi yok.
ikisini de ayrı middleware ile kontrol etmek istiyorum. burada nasıl bir yol izlemeliyim.

Çevrimdışı

#2 04.04.2019 21:25:19

mgsmus
Moderatör
Yer: Mersin
Kayıtlı: 17.08.2013
Mesajlar: 1,665
Website

Yanıt: login işlemi

Laravel'de kimlik doğrulamanın çekirdeğinde Guard sistemi var. Guard bize kimlik doğrulama işleminde hangi yapıyı kullanacağımızı seçmemizi sağlıyor. Bunlar oturum (session) ve token (stateless yapıdaki kimlik doğrulamaları için, ör. api).

Kimlik doğrulama işleminde ise bir de sağlayıcı (provider) var. Bu Guard'ı kullanacak olan kullanıcıları bize sağlayan kaynağı seçmemizi sağlıyor.. Bu kaynak da iki şekilde oluyor: eloquent:Model ya da database:table şeklinde. Yani eloquent:App\User (User modeli aracılığıyla) ya da database:users (users tablosu aracılığıyla) gibi.

Bu bilgiler config/auth.php içerisinde belirleniyor. Laravel ile standart gelen eloquent:App\User.

Kısa girişten sonra şöyle tarif edeyim:

User modelinin bir kopyasını oluşturup Admin şeklinde adını ve sınıf adını değiştirin.

Ekstra olarak Admin modelinize protected $guard = 'admin'; şeklinde eleman ekleyeceksiniz. Bu hangi guard'ı kullanacağımızı belirliyor.

config/auth.php içerisine yeni admin isimli yeni guard'ı ekleyeceksiniz:

'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'admin' => [
            'driver' => 'session',
            'provider' => 'admins',
        ],

        'api' => [
            'driver' => 'token',
            'provider' => 'users',
        ],
    ],

Daha sonra yine config/auth.php içerisine yeni admin provider ekleyeceğiz:

'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\User::class,
        ],
        'admins' => [
            'driver' => 'eloquent',
            'model' => App\Admin::class,
        ],
],

Daha sonra yine config/auth.php içerisine adminin şifresini sıfırlayabilmesi için passwords alanına yeni ayar ekleyeceğiz:

'passwords' => [
    'users' => [
        'provider' => 'users',
        'table' => 'password_resets',
        'expire' => 60,
    ],

    // hem users hem de admins tablosunda aynı emailin olabileceğini düşünerek buna admin_password_resets şeklinde ayrı bir tablo açıyoruz
    // Bunun için yeni bir migrasyon oluşturup mevcut password_resets tablosunun migrasyonunu kullanın, aşağıda veriyorum
    'admins' => [
        'provider' => 'admins',
        'table' => 'admin_password_resets',
        'expire' => 60,
    ],
],

admin_password_resets için migrason

$ php artisan create_admin_password_resets_table
<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateAdminPasswordResetsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('admin_password_resets', function (Blueprint $table) {
            $table->string('email')->index();
            $table->string('token');
            $table->timestamp('created_at')->nullable();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('admin_password_resets');
    }
}

Bundan sonra
Auth::guard('admin')->check()
Auth::guard('admin')->attempt($credentials);
Auth::guard('admin')->login($user);

gibi guard bazlı işlemler yapabilirsiniz. Otomatik olarak App\Admin modelini ve admins tablosunu (adının öyle olduğunu varsayıyorum) kullanacak.

auth middlewareini kullanırken de ->middleware('auth:admin') şeklinde guard seçebiliyorsunuz

Geriye LoginController'ı düzenlemek kalıyor.

Artık başlayacaksınız, takıldığınız yerde yardımcı olacağız, yazmaktan yoruldum smile

Çevrimiçi

#3 05.04.2019 09:18:44

alihankoc
Üye
Kayıtlı: 14.09.2017
Mesajlar: 57

Yanıt: login işlemi

mgsmus yazdı:

Laravel'de kimlik doğrulamanın çekirdeğinde Guard sistemi var. Guard bize kimlik doğrulama işleminde hangi yapıyı kullanacağımızı seçmemizi sağlıyor. Bunlar oturum (session) ve token (stateless yapıdaki kimlik doğrulamaları için, ör. api).

Kimlik doğrulama işleminde ise bir de sağlayıcı (provider) var. Bu Guard'ı kullanacak olan kullanıcıları bize sağlayan kaynağı seçmemizi sağlıyor.. Bu kaynak da iki şekilde oluyor: eloquent:Model ya da database:table şeklinde. Yani eloquent:App\User (User modeli aracılığıyla) ya da database:users (users tablosu aracılığıyla) gibi.

Bu bilgiler config/auth.php içerisinde belirleniyor. Laravel ile standart gelen eloquent:App\User.

Kısa girişten sonra şöyle tarif edeyim:
....

Bilal oğlana anlatır gibi anlatmışsın @mgsmus  big_smile tebrik ediyorum.

Çevrimdışı

#4 05.04.2019 10:08:08

ykulac
Üye
Kayıtlı: 28.01.2019
Mesajlar: 11

Yanıt: login işlemi

verdiğiniz değerli bilgiler için çok teşekkür ederim. nette bulduğum örnekler hep users tablosu ile ilgili örneklerdi.

Çevrimdışı

#5 05.04.2019 15:53:32

ykulac
Üye
Kayıtlı: 28.01.2019
Mesajlar: 11

Yanıt: login işlemi

Auth ile ilgili bütün anlatılan yazılan çizilenler, veritabanında user ve password alanlarının olmasıyla ilgili. bizim tabloda alanların isimleri farklı. login işlemlerini standart php session işlemi gibi yapsam, yani Session:: sınıfıyla, bir sıkıntı olur mu?

Çevrimdışı

#6 05.04.2019 16:20:51

mgsmus
Moderatör
Yer: Mersin
Kayıtlı: 17.08.2013
Mesajlar: 1,665
Website

Yanıt: login işlemi

Dokümanlara ve LoginController içerisinde kullanılan traitlere vs bakarsanız hepsini değiştirmenin yolu var. Örn:

$credentials = $request->only('email', 'password');

if (Auth::attempt($credentials)) {
    //
}

Örneğin App\Http\Controllers\Auth\LoginController içerisine şunu eklerseniz:

public function username()
{
        return 'username';
}

LoginController bundan sonra kullanıcı adı olarak email değil username sütununa bakacak.

Bence biraz daha araştırın, takıldığınız yerde yardımcı olalım, varlık içinde yokluk yaşamayın sonra.

Çevrimiçi

Forum alt kısmı