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.
W dokumentach Laravela jest jeszcze jedna metoda użycia osłony, która również nie działa.
Byłoby bardzo pomocne, gdyby ktoś mógł rozwiązać problemy i poprawić mnie, jeśli mylę się.
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 Adminaapp/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 administratoraAuth::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/
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.
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.
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