क्या कोई उदाहरण के साथ लारवेल 5.2 बहु प्रामाणिक की व्याख्या कर सकता है


171

मैं प्रमाणित करने के लिए कोशिश कर रहा हूँ उन और व्यवस्थापक प्रपत्र userमेज और adminक्रमशः तालिका। मैं Userमॉडल का उपयोग कर रहा हूँ जैसा कि बॉक्स के बाहर लार्वा द्वारा प्रदान किया गया है और Admin.मैंने इसके लिए एक गार्ड कुंजी और प्रदाता कुंजी जोड़ी है।auth.php.

गार्ड

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

प्रदाताओं

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

मार्गों

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');
});

मैंने एक निर्देशिका बनाई है, AuthAdminजहां लारवेल की डिफ़ॉल्ट AuthController.phpऔर PasswordController.phpफाइलें मौजूद हैं। (तदनुसार नाम संशोधित)

सबसे पहले, लारवेल के डॉक्स में उल्लेख किया गया है कि इस तरह के प्रमाणीकरण के दौरान कस्टम गार्ड को कैसे निर्दिष्ट किया जाए जो काम नहीं कर रहा है।
यहां छवि विवरण दर्ज करें

लारवेल के डॉक्स में एक अन्य विधि का उल्लेख है जो एक गार्ड का उपयोग करने के लिए है जो काम नहीं कर रहा है।

यहां छवि विवरण दर्ज करें

यह फायदेमंद होगा यदि कोई व्यक्ति मुद्दों को हल कर सकता है और मुझे गलत कर सकता है।


लारवेल ने 5.2.6 संस्करण में एक बग तय किया। protected $guard = 'guard_name'अब इस्तेमाल किया जा सकता है।
imrealashu

लारवेल में कई व्यवस्थापक पैनल जनरेटर पैकेज उपलब्ध हैं। मैं मल्लाह व्यवस्थापक पसंद करते हैं। उन्हें स्थापित करना आसान और आसान है। यह आपको टन के कोड को बचा सकता है। आपको बस यह समझने की ज़रूरत है कि यह कैसे काम करता है। पहिया को सुदृढ़ मत करो। वायेजर - द मिसिंग लारवेल एडमिन जेंटेला बूटस्ट्रैप एडमिन टेम्प्लेट के साथ एक लारवेल एप्लिकेशन।
सतीश आर।

जवाबों:


201

बहुत सारे खुदाई और बहुत सारे सवालों और जवाबों के बाद मैं आखिरकार लारवेल 5.2 मल्टी प्रामाणिक को दो टेबल के साथ काम करने में कामयाब रहा, इसलिए मैं अपने प्रश्न का उत्तर लिख रहा हूं।

लार्वा 5.2 में बहु प्रमाण को कैसे लागू किया जाए

जैसा कि ऊपर उल्लेख किया गया है। दो टेबल adminऔरusers

लारवेल 5.2 में एक नया artisanकमांड है।

php artisan make:auth

यह बुनियादी लॉगिन / रजिस्टर उत्पन्न होगा route, viewऔर controllerके लिए userतालिका।

सादगी के लिए adminटेबल को usersटेबल बनाएं ।

व्यवस्थापक के लिए व्यवस्थापक
app/Http/Controllers/AdminAuth/AuthController
app/Http/Controllers/AdminAuth/PasswordController
(ध्यान दें: मैंने अभी इन फ़ाइलों को app/Http/Controllers/Auth/AuthControllerयहां से कॉपी किया है)

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

दो विधियाँ जोड़ें और निर्दिष्ट करें $redirectToऔर$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');
}  

यह आपको व्यवस्थापक के लिए एक और लॉगिन फ़ॉर्म खोलने में मदद करेगा

के लिए एक मिडलवेयर बनाना 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);
}

}

में मिडिलवेयर पंजीकृत करें kernel.php

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

AdminController उदाहरण के लिए, इस मिडलवेयर का उपयोग करें

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');
    }
}

इसे काम करने के लिए और प्रमाणीकृत व्यवस्थापक उपयोग के json पाने के लिए सभी की आवश्यकता है
Auth::guard('admin')->user()

संपादित करें - 1
हम प्रमाणित उपयोगकर्ता को सीधे उपयोग कर सकते हैं
Auth::user() लेकिन यदि आपके पास दो प्रमाणीकरण तालिका है तो आपको उपयोग करना होगा

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

लॉगआउट के लिए

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

प्रमाणित उपयोगकर्ता json के लिए

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

संपादित करें २

अब आप लारवेल 5.2 बहुस्तरीय कार्यान्वित परियोजना http://imrealashu.in/code/laravel/multi-auth-with-laravel-5-2-2/ डाउनलोड कर सकते हैं


बहुत बहुत धन्यवाद, यह वही था जो मैं खोज रहा था, इसने संशोधन के एक बिट के साथ काम किया। Q के लिए बहुत कुछ +1 और Ans के लिए +1 का धन्यवाद, काश मैं +1 अधिक कर पाता। बहुत बहुत धन्यवाद ..
रुमखान

@imrealashu, जैसा कि मैंने आपके उत्तर के अनुसार प्रोजेक्ट बनाया है। लेकिन यह एक ही नाम के साथ कई वर्गों की त्रुटि उत्पन्न करता है। तो उसका क्या? यदि मैं व्यवस्थापक नाम के लिए वर्ग का नाम बदलता हूं, तो मुझे कहां परिवर्तन करने की आवश्यकता है?
अक्षय वाघसिया

1
क्या आप यह भी बता सकते हैं कि एडमिन गार्ड के लिए "पासवर्ड रीसेट" कैसे करें।
शोएब रेहान

1
उत्कृष्ट स्पष्टीकरण के लिए धन्यवाद मेरे लिए सब कुछ बहुत उपयोगी था। मिडलवेयर अतिथि का उपयोग करने के लिए, RedirectIfAuthenticated.php फ़ाइल को निम्न पंक्ति if (Auth :: guard ($ guard) -> check ()) { return redirect ('/'); } में बदलें: मूल: परिवर्तन के बाद: if (Auth :: guard ('yourcustomguard') -> check () || Auth :: check ()) { return redirect ('/'); }
क्रिस्टियन मेजा

1
@Jeffz सिर्फ खराब डॉक्यूमेंटेशन के कारण और मल्टी-ऑर्ट पर काम करने के कोई उदाहरण नहीं होने के कारण .. हम अच्छे डॉक्यूमेंटेशन की उम्मीद करते हैं और इस 5.3 अपडेट पर नए कूल फीचर्स का आनंद लेते हैं।
imrealashu

2

मामले में यह किसी को भी मदद करता है, और यह सिर्फ मिडलवेयर की समझ की कमी के कारण हो सकता है, यहाँ मुझे यह काम करने के लिए क्या करना था (@imrealashu द्वारा उठाए गए कदमों के अलावा) ...

इन route.php:

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

यह webमिडिलवेयर ग्रुप में है। इससे पहले मैंने इसे एक अलग adminमिडलवेयर समूह में और यहां तक ​​कि एक auth:adminसमूह में भी डालने की कोशिश की, लेकिन यह काम नहीं किया, यह केवल मेरे लिए काम किया जब मैंने मिडलवेयर को रूट पर व्यवस्थापक के रूप में निर्दिष्ट किया। मुझे नहीं पता कि यह क्यों है, लेकिन मुझे आशा है कि यह दूसरों को अपने बालों को बाहर खींचने से बचाता है जैसे मैंने किया था।


मैंने आपकी मल्टी परसेंट जिप फाइल को एक्ज़िस्टिंग प्रोजेक्ट फाइल्स से बदल दिया है, तब जब मैं अपने DB को इस एरर शो में माइग्रेट करता हूँ .. [Symfony \ Component \ Console \ Exception \ RuntimeException] पर्याप्त तर्क नहीं (लापता: "नाम")।
जी नागा सुब्रह्मण्यम

दरअसल मेरे लिए एडमिन लॉग इन कर रहा है लेकिन एडमिन को रीडायरेक्ट नहीं किया गया है। यह काम करने के बाद आप यह बता सकते हैं कि ऐसा क्यों है? मुझे अन्य मार्गों को पंजीकृत करने के लिए मिला क्योंकि यह संभव है Route::group(['middleware' => ['admin']], function () { //Admin Routes... });क्योंकि यह मेरे लिए काम नहीं कर रहा है
लीप हॉक

0

यह लार्वा 5.6 में बहुत आसान है। बस config/auth.phpइस पंक्ति को providersसरणी में जोड़ें और जाएं :

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

ध्यान दें कि हमने databaseड्राइवर के लिए उपयोग किया हैeloquent

अब इसे guardsसरणी में जोड़ें :

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

अब हम कर चुके हैं! प्रवेश तालिका के साथ काम करते समय इसका उपयोग करें:

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

चीयर्स।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.