Laravel 5.2 Çoklu Yetkilendirmeyi Örnekle Açıklayan Herkes


172

Sırasıyla kullanıcıların ve yönetici form usertablosunun ve admintablosunun kimliğini doğrulamaya çalışıyorum . UserModeli kutudan çıkan laravel tarafından sağlanan şekliyle kullanıyorum ve bunun için Admin.bir güvenlik anahtarı ve sağlayıcı anahtarı ekledim.auth.php.

Gardiyanlar

'guards' => [
    'user' =>[
        'driver' => 'session',
        'provider' => 'user',
    ],
    'admin' => [
        'driver' => 'session',
        'provider' => 'admin',
    ],
],  

Sağlayıcıları

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

Rotalar

Route::group(['middleware' => ['web']], function () {
    // Login Routes.   
    Route::get('/admin/login','AdminAuth\AuthController@showLoginForm');
    Route::post('/admin/login','AdminAuth\AuthController@login');
    Route::get('/admin/logout','AdminAuth\AuthController@logout');

    // Registration Routes.
    Route::get('admin/register', 'AdminAuth\AuthController@showRegistrationForm');
    Route::post('admin/register', 'AdminAuth\AuthController@register');

    Route::get('/admin', 'AdminController@index');
});

AuthAdminLaravel'in varsayılan AuthController.phpve PasswordController.phpdosyalarının bulunduğu bir dizin oluşturdum . (Ad Alanı Buna Göre Değiştirildi)

Her şeyden önce, Laravel'in belgelerinde, böyle kimlik doğrulaması yapılırken özel korumanın nasıl belirtileceği işe yaramadı.
resim açıklamasını buraya girin

Laravel'in belgelerinde de çalışmayan bir bekçi kullanmak için bahsedilen başka bir yöntem var.

resim açıklamasını buraya girin

Birinin sorunları çözmesi ve yanılıyorsam beni düzeltmesi yararlı olacaktır.


Laravel 5.2.6 sürümündeki bir hatayı düzeltti. protected $guard = 'guard_name'şimdi kullanılabilir.
imrealashu

Laravel'de birçok Yönetici paneli oluşturucu paketi bulunmaktadır. Voyager Admin'i tercih ederim. Onları kurmak kolay ve esinti. Bu size tonlarca kod kazandırabilir. Sadece nasıl çalıştığını anlamanız gerekiyor. Tekerleği yeniden icat etme. Voyager - Eksik Laravel Yönetici Gentelella bootstrap yönetici tempalte ile bir Laravel uygulaması.
sathish R

Yanıtlar:


201

Çok sayıda kazma ve birçok soru ve cevaptan sonra nihayet Laravel 5.2 Multi Auth'u iki tablo ile çalışmayı başardım, Bu yüzden kendi sorumun cevabını yazıyorum.

Larvel 5.2'de Çoklu Kimlik Doğrulama nasıl uygulanır

Yukarıda belirtildiği gibi. İki masa adminveusers

Laravel 5.2'in yeni bir artisankomutu var.

php artisan make:auth

temel giriş / kayıt üretecek route, viewve controlleriçin usermasaya.

Basitlik için bir admintablo olarak userstablo yapın .

Yönetici Denetleyicisi
app/Http/Controllers/AdminAuth/AuthController
app/Http/Controllers/AdminAuth/PasswordController
(not: Bu dosyaları app/Http/Controllers/Auth/AuthControllerburadan kopyaladım )

config/auth.php

//Authenticating guards
'guards' => [
    'user' =>[
        'driver' => 'session',
        'provider' => 'user',
    ],
    'admin' => [
        'driver' => 'session',
        'provider' => 'admin',
    ],
],  

//User Providers
'providers' => [
    'user' => [
        'driver' => 'eloquent',
        'model' => App\User::class,
    ],
    'admin' => [
        'driver' => 'eloquent',
        'model' => App\Admin::class,
    ]
],  

//Resetting Password  
'passwords' => [
    'clients' => [
        'provider' => 'client',
        'email' => 'auth.emails.password',
        'table' => 'password_resets',
        'expire' => 60,
    ],
    'admins' => [
        'provider' => 'admin',
        'email' => 'auth.emails.password',
        'table' => 'password_resets',
        'expire' => 60,
    ],
],  

route.php

Route::group(['middleware' => ['web']], function () {
    //Login Routes...
    Route::get('/admin/login','AdminAuth\AuthController@showLoginForm');
    Route::post('/admin/login','AdminAuth\AuthController@login');
    Route::get('/admin/logout','AdminAuth\AuthController@logout');

    // Registration Routes...
    Route::get('admin/register', 'AdminAuth\AuthController@showRegistrationForm');
    Route::post('admin/register', 'AdminAuth\AuthController@register');

    Route::get('/admin', 'AdminController@index');

});  

AdminAuth/AuthController.php

İki yöntem ekleyin $redirectTove$guard

protected $redirectTo = '/admin';
protected $guard = 'admin';
public function showLoginForm()
{
    if (view()->exists('auth.authenticate')) {
        return view('auth.authenticate');
    }

    return view('admin.auth.login');
}
public function showRegistrationForm()
{
    return view('admin.auth.register');
}  

yönetici için başka bir giriş formu açmanıza yardımcı olacaktır

için bir ara katman oluşturma admin

class RedirectIfNotAdmin
{
/**
 * Handle an incoming request.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \Closure  $next
 * @param  string|null  $guard
 * @return mixed
 */
public function handle($request, Closure $next, $guard = 'admin')
{
    if (!Auth::guard($guard)->check()) {
        return redirect('/');
    }

    return $next($request);
}

}

ara katman yazılımını kaydet kernel.php

 protected $routeMiddleware = [
    'admin' => \App\Http\Middleware\RedirectIfNotAdmin::class,
];

Bu ara katman yazılımını AdminController örn.

namespace App\Http\Controllers;

use Illuminate\Http\Request;

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

class AdminController extends Controller
{
    public function __construct(){
        $this->middleware('admin');
   }
public function index(){
        return view('admin.dashboard');
    }
}

Çalışmasını sağlamak ve ayrıca kimliği doğrulanmış yönetici kullanımı için json almak için tüm bunlar gerekli
Auth::guard('admin')->user()

Düzenle - 1
Kimliği doğrulanmış kullanıcıya doğrudan kullanarak erişebiliriz,
Auth::user() ancak iki kimlik doğrulama tablonuz varsa,

Auth::guard('guard_name')->user()  

çıkış için

Auth::guard('guard_name')->user()->logout()

kimliği doğrulanmış kullanıcı json için

Auth::guard('guard_name')->user()  

Düzenle 2

Şimdi Laravel 5.2 Multiauth uygulanmış Proje indirebilirsiniz http://imrealashu.in/code/laravel/multi-auth-with-laravel-5-2-2/


çok teşekkürler adam, ben aradığım şey buydu, bir litle biraz modifikasyon ile çalıştı. Q için +1 ve Ans için +1, çok daha fazla + 1'leme diliyorum. thanks a lot ..
rummykhan

@imrealashu, Cevabınıza göre proje oluşturduğum gibi. Ancak aynı ada sahip birden fazla sınıf hatası üretir. Peki buna ne dersiniz? Yönetici kimlik doğrulaması için sınıf adını değiştirirsem, nerede değişiklik yapmam gerekir?
Akshay Vaghasiya

1
ayrıca yönetici koruması için "Parola Sıfırlama" nasıl açıklanır.
Shoaib Rehan

1
Mükemmel açıklama için teşekkürler her şey benim için çok yararlı oldu. Ara katman yazılımı misafirini kullanmak için, RedirectIfAuthenticated.php dosyasını aşağıdaki satırı if (Auth :: guard ($ guard) -> check ()) { return redirect ('/'); } değiştirin: Orijinal: Değişiklikten sonra: if (Auth :: guard ('yourcustomguard') -> check () || Auth :: check ()) { return redirect ('/'); }
Cristian Meza

1
@Jeffz sadece kötü belgeleme ve çoklu kimlik doğrulama üzerinde çalışma örnekleri nedeniyle .. biz iyi belgelendirme ve evet bu 5.3 güncellemesinde yeni harika özellikleri bekliyoruz.
imrealashu

2

Bu kimseye yardımcı olursa ve bu sadece ara katman yazılımı anlayışımdan kaynaklanmıyorsa, işte bu çalışmayı elde etmek için yapmam gereken şeydi (@imrealashu tarafından atılan adımlara ek olarak) ...

İçinde route.php:

Route::get('/admin', [
  'middleware' => 'admin',
  'uses' => 'AdminController@index'
]);

Bu webara katman grubundadır. Bundan önce ayrı bir adminara katman yazılımı grubuna ve hatta bir auth:admingruba koymaya çalıştım ama bu işe yaramadı, sadece yolun üzerinde ara katmanı yönetici olarak belirlediğimde benim için çalıştı. Bunun neden olduğu hakkında hiçbir fikrim yok ama umarım diğerleri gibi saçlarını çekmekten kurtarır.


Ezisting proje dosyaları ile değiştirilen çoklu yetkilendirme zip dosyanızı indirdim ve DB'mi geçirdiğimde bu hata gösterisini gerçekleştirdim. [Symfony \ Component \ Console \ Exception \ RuntimeException] Yeterli argüman yok (eksik: "isim").
G Naga Subrahmanyam

Aslında benim için admin giriş yapıyor ancak admin'e yönlendirilmiyor. Bunu yaptıktan sonra işe yaradığını söyleyebilir misiniz? Benim Route::group(['middleware' => ['admin']], function () { //Admin Routes... });için çalışmıyor çünkü mümkün olduğu gibi diğer güzergahları kaydettirmek zorunda
Leap Hawk

0

Laravel 5.6'da çok kolay. Sadece config/auth.phpbu satırı providersdiziye ekleyin ve diziye ekleyin :

'admins' => [
   'driver' => 'database',
   'table' => 'admin_table'
]

databaseSürücü için kullandığımızı unutmayın eloquent.

Şimdi bunu guardsdiziye ekleyin :

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

Şimdi işimiz bitti! Yöneticiler tablosuyla çalışırken bunu kullanın:

Auth::guard('admin_guard')->User();

Şerefe.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.