যে কেউ উদাহরণ সহ লারাভেল 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'এখন ব্যবহার করা যেতে পারে।
ইমরালাশু

লারাভেলে অনেকগুলি অ্যাডমিন প্যানেল জেনারেটর প্যাকেজ উপলব্ধ available আমি ভয়েজার অ্যাডমিন পছন্দ করি। এগুলি ইনস্টল করা সহজ এবং বাতাস। এটি আপনাকে কোডের টন বাঁচাতে পারে। এটি কীভাবে কাজ করে তা আপনাকে কেবল বুঝতে হবে। চাকা পুনরুদ্ধার করবেন না। ভয়েজার - নিখোঁজ লারাভেল অ্যাডমিন জেনেটেল্লা বুটস্ট্র্যাপ অ্যাডমিন টেম্পল্ট সহ একটি লারাভেল অ্যাপ্লিকেশন।
সতীশ আর

উত্তর:


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

এটিকে কাজ করার জন্য এবং সত্যায়িত প্রশাসনিক ব্যবহারের জেসসন পাওয়ার জন্য এটিই প্রয়োজন all
Auth::guard('admin')->user()

সম্পাদনা করুন - 1
আমরা সরাসরি ব্যবহার করে প্রমাণীকৃত ব্যবহারকারী অ্যাক্সেস করতে পারি
Auth::user() তবে আপনার যদি দুটি প্রমাণীকরণের টেবিল থাকে তবে আপনাকে ব্যবহার করতে হবে

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

লগআউট জন্য

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

অনুমোদনপ্রাপ্ত ব্যবহারকারীর জন্য

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

সম্পাদনা 2

এখন আপনি লারাভেল 5.2 মাল্টিআউথ প্রয়োগিত প্রকল্পটি ডাউনলোড করতে পারেন http://imrealashu.in/code/laravel/m Multi-auth-with-laravel-5-2-2-2/


অনেক লোককে ধন্যবাদ, আমি এটাই খুঁজছিলাম, এটি একটি লিটল বিট পরিবর্তনের সাথে কাজ করেছিল। Q- এর জন্য প্রচুর +1 এবং উত্তরগুলির জন্য +1 ধন্যবাদ, আমি আরও +1 করতে পারতাম wish অনেক অনেক ধন্যবাদ ..
রম্মিখন

@ আইমরালাশু, যেমন আপনার উত্তর অনুসারে আমি প্রকল্প তৈরি করেছি। তবে এটি একই নামে একাধিক শ্রেণীর ত্রুটি উত্পন্ন করে। তাহলে কি হবে? আমি যদি প্রশাসক লেখকের জন্য শ্রেণীর নাম পরিবর্তন করি তবে আমার পরিবর্তনগুলি কোথায় করা উচিত?
অক্ষয় বাঘাসিয়া

1
আপনি কীভাবে অ্যাডমিন গার্ডের জন্য "পাসওয়ার্ড পুনরায় সেট করুন" তাও ব্যাখ্যা করতে পারেন।
শোয়েব রেহান

1
চমৎকার ব্যাখ্যাটির জন্য ধন্যবাদ আমার জন্য সমস্ত কিছু কার্যকর ছিল। মিডলওয়্যার অতিথিকে ব্যবহার করতে, RedirectIfAuthenticated.php ফাইলটি নিম্নলিখিত লাইনে পরিবর্তন করুন: আসল: if (Auth :: guard ($ guard) -> check ()) { return redirect ('/'); } পরিবর্তনের পরে: if (Auth :: guard ('yourcustomguard') -> check () || Auth :: check ()) { return redirect ('/'); }
ক্রিশ্চিয়ান মেজা

1
@ জেফজ কেবলমাত্র খারাপ ডকুমেন্টেশন এবং বহু-প্রমাণীকরণের জন্য কোনও কার্যকরী উদাহরণের কারণে এটি নয় .. আমরা ভাল ডকুমেন্টেশন আশা করি এবং এই 5.3 আপডেটে নতুন দুর্দান্ত বৈশিষ্ট্যগুলি হ্যাঁ।
ইমরালাশু

2

যদি এটি কাউকে সহায়তা করে এবং এটি মিডলওয়্যার সম্পর্কে আমার বোঝার অভাবের কারণেই হতে পারে, এই কাজটি করার জন্য আমাকে এখানে কি করতে হয়েছিল (@ আইমরিলাশু দ্বারা গৃহীত পদক্ষেপগুলি ছাড়াও) ...

ইন route.php:

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

এটি webমিডওয়্যার গ্রুপে রয়েছে। এর আগে আমি এটি একটি পৃথক adminমিডলওয়্যার গ্রুপ এবং এমনকি একটি auth:adminগ্রুপে রাখার চেষ্টা করেছি কিন্তু এটি কাজ করে না, এটি কেবল তখনই আমার পক্ষে কাজ করেছিল যখন আমি মিডলওয়্যারটিকে রুটে নিজেই অ্যাডমিন হিসাবে নির্দিষ্ট করেছি। কেন এটি আমার কোনও ধারণা নেই তবে আমি আশা করি এটি আমার মতো করে অন্যদের চুল টানতে বাঁচায়।


আমি আপনার মাল্টি আথ জিপ ফাইলটি ইজাস্টিং প্রজেক্ট ফাইলগুলির সাথে প্রতিস্থাপিত করেছি তারপরে যখন আমি আমার ডিবি স্থানান্তরিত করি তখন এই ত্রুটিটি দেখান .. [সিমফনি \ উপাদান \ কনসোল \ ব্যতিক্রম \ রানটাইম এক্সসেপশন] পর্যাপ্ত আর্গুমেন্ট নেই (অনুপস্থিত: "নাম")।
জি নাগা সুব্রাহ্মণ্যাম

আসলে আমার জন্য অ্যাডমিন লগইন করছে তবে অ্যাডমিনে পুনর্নির্দেশ করা হয়নি। এটি করার পরে এটি কাজ করে আপনি কি দয়া করে তা বলতে পারেন? আমি অন্যান্য রুটগুলি যেমন 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();

চিয়ার্স।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.