Czy ktoś może wyjaśnić Laravel 5.2 Multi Auth na przykładzie

To, co zrobiłem do tej pory.
Staram się uwierzytelnić użytkowników i admin form user table i admin table odpowiednio.
Używam modelu User dostarczonego przez laravel po wyjęciu z pudełka i stworzonego dokładnie tak samo dla Admin.
Dodałem klucz strażnika i klucz dostawcy do auth.php

Strażnicy

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

Dostawcy

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

Trasy

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

});

Utworzyłem katalog o nazwie AuthAdmin gdzie znajdują się domyślne pliki Laravela AuthController.php i PasswordController.php. (Przestrzeń nazw odpowiednio zmodyfikowana)

Przede wszystkim w dokumentach Laravela wspomniano, że jak określić custom guard podczas uwierzytelniania w ten sposób, co nie działa.
Tutaj wpisz opis obrazka

W dokumentach Laravela jest jeszcze jedna metoda użycia osłony, która również nie działa.

Tutaj wpisz opis obrazka

Byłoby bardzo pomocne, gdyby ktoś mógł rozwiązać problemy i poprawić mnie, jeśli mylę się.

Author: imrealashu, 2016-01-05

3 answers

Po wielu Kopaniach i wielu pytaniach i odpowiedziach w końcu udało mi się pracować Laravel 5.2 Multi Auth z dwoma tabelami, więc piszę odpowiedź na własne pytanie.

Jak zaimplementować Multi Auth w 5.2

Jak wspomniano powyżej. Dwie tabele admin i users

Laravel 5.2 ma nową komendę artisan.

php artisan make:auth

Wygeneruje podstawowe logowanie/rejestrację route, view i controller dla user tabeli.

Make a admin tabela jako users tabela dla uproszczenia.

Kontroler Dla Admina
app/Http/Controllers/AdminAuth/AuthController
app/Http/Controllers/AdminAuth/PasswordController
(Uwaga: właśnie skopiowałem te pliki z app/Http/Controllers/Auth/AuthController tutaj)

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

Dodaj dwie metody i określ $redirectTo i $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');
}  
To pomoże Ci otworzyć inny formularz logowania dla admina.]}

Tworzenie oprogramowania pośredniczącego dla 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);
}

}

Zarejestruj middleware w kernel.php

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

Użyj tego middleware w AdminController np.

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

To wszystko jest potrzebne, aby to działało, a także aby uzyskać JSON uwierzytelnionego użytku administratora
Auth::guard('admin')->user()

Edytuj - 1
Możemy uzyskać dostęp do uwierzytelnionego użytkownika bezpośrednio za pomocą
Auth::user() ale jeśli masz dwie tabele uwierzytelniania, musisz użyć

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

Do wylogowania

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

Dla uwierzytelnionego użytkownika json

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

Edycja 2

Teraz możesz pobrać projekt Laravel 5.2 Multiauth http://imrealashu.in/code/laravel/multi-auth-with-laravel-5-2-2/

 188
Author: imrealashu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-28 20:31:49

Jeśli to komuś pomoże, a to może być spowodowane moim brakiem zrozumienia middleware, oto, co musiałem zrobić ,aby to zadziałało (oprócz kroków podjętych przez @imrealashu)...

W route.php:

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

To jest w grupie web middleware. Wcześniej próbowałem umieścić go w oddzielnej grupie admin middleware, a nawet w grupie auth:admin, ale to nie zadziałało, zadziałało tylko dla mnie, gdy określiłem middleware jako admin na samej trasie. Nie mam pomysł, dlaczego tak jest, ale mam nadzieję, że uratuje to innych od wyrywania włosów, tak jak ja.

 2
Author: Sworrub Wehttam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-13 02:02:14

W Laravel dostępnych jest wiele pakietów generatora panelu administracyjnego. Wolę Voyager Admin. Instalowanie ich jest łatwe i proste. To może zaoszczędzić mnóstwo kodu. Musisz tylko zrozumieć, jak to działa. Nie odkrywaj koła na nowo.

Voyager-Zaginiony Laravel Admin

Aplikacja Laravel z Gentelella Bootstrap Admin tempalte.

 2
Author: sathish R,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-27 17:04:50