Laravelの複数認証がEloquentではなくDoctrineを使用するようにしようとしています。私は複数のことを試しましたが、つづきます。私は現在、2つのガード、2つのモデル、2つのログインコントローラなどを定義しています。どちらか一方を有効にすると、それらは機能します。両方を同時に試してみると、デフォルトのガードだけが動作するようです。他のガードにアクセスしようとすると、間違ったログインページにリダイレクトされます。Laravel 5.5マルチ認証ルーティングの問題
私は/ログインに行く場合は、 - (ログインせずに)
私は/家に行けば
を期待通りに動作します - 私は、AS /レジスタ - 作品に行けばを期待通りに/ログインにリダイレクト
私は/管理/ログインに行く場合を予想 -
私は/管理に行けば
を期待通りに動作します(のWi - 私は/管理/登録に行けばを期待通りに動作しますログインしている) - fail - は/ admin/loginにリダイレクトされるはずですが、代わりに/ loginにリダイレクトされる必要があります。
私は何か簡単なことがないと確信しています。すべてが個別に機能します。それはちょうど正しいミドルウェアを使用する/ adminルートを取得しています...私はおそらく...?
マイroutesファイル:
Auth::routes();
// staff authentication routes
Route::group([ 'middleware' => [ 'web' ] ], function() {
Route::get('admin/login', 'Auth\[email protected]');
Route::post('admin/login', [ 'as' => 'staff.login', 'uses' => 'Auth\[email protected]' ]);
Route::get('admin/register', 'Auth\[email protected]');
Route::post('admin/register', [ 'as' => 'staff.register', 'uses' => 'Auth\[email protected]' ]);
Route::group([ 'middleware' => [ 'staff' ] ], function() {
Route::get('/admin', '[email protected]')->name('admin');
});
});
Route::get('/home', '[email protected]')->name('home');
私は様々なルート定義を試みたが、これは、最新の繰り返しです。これまでの反復もいずれもうまくいきませんでした。
マイ認証ファイル:
'defaults' => [
'guard' => 'web',
'passwords' => 'users',
],
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
],
'staff' => [
'driver' => 'session',
'provider' => 'adminusers',
]
],
'providers' => [
'users' => [
'driver' => 'doctrine',
'model' => App\Users\Customer::class,
],
'adminusers' => [
'driver' => 'doctrine',
'model' => App\Users\Staff::class,
]
],
'passwords' => [
'users' => [
'provider' => 'users',
'table' => 'password_resets',
'expire' => 60,
],
'adminusers' => [
'provider' => 'adminusers',
'table' => 'password_resets',
'expire' => 30,
],
],
マイLoginController(箱から出してと基本的に同じ):
class LoginController extends Controller {
use AuthenticatesUsers;
protected $redirectTo = '/home';
public function __construct() {
$this->middleware('guest')->except('logout');
}
}
マイStaffLoginController:
<?php
class StaffLoginController extends Controller {
use AuthenticatesUsers;
protected $redirectTo = '/admin';
protected $guard = 'staff';
public function __construct() {
$this->middleware('guest')->except('logout');
}
public function showLoginForm() {
return view('auth.staff.login');
}
public function login(Request $request) {
$this->validate($request, [
'email' => 'required|email',
'password' => 'required',
]);
if(auth()->guard('staff')->attempt([
'email' => $request->input('email'),
'password' => $request->input('password'),
])) {
return view('staff');
} else {
return view('auth.staff.login')->withErrors([ 'email' => 'Authentication failed' ]);
}
}
protected function guard() {
return \Auth::guard('staff');
}
}
マイAdminController:
class AdminController extends Controller {
public function __construct() {
$this->middleware('auth:staff');
}
public function index() {
return view('staff');
}
}
マイRedirectIfStaffUnauthenticatedミドルウェア( 'スタッフ' => \ SNJ \のHttp \ミドルウェア\ RedirectIfStaffUnauthenticatedとしてHTTP \ Kernel.php routeMiddlewareに登録されて::クラス):
class RedirectIfStaffUnauthenticated {
public function handle($request, Closure $next, $guard = 'staff') {
if (!Auth::guard($guard)->check()) {
return view('auth.staff.login');
}
return $next($request);
}
}
UPDATE:
web.phpで変更ルートはとしてこのようであると(管理者/ログインおよび管理者からミドルウェアを除去/ルートを登録:
Auth::routes();
// staff authentication routes
Route::get('admin/login', 'Auth\[email protected]');
Route::post('admin/login', [ 'as' => 'staff.login', 'uses' => 'Auth\[email protected]' ]);
Route::get('admin/register', 'Auth\[email protected]');
Route::post('admin/register', [ 'as' => 'staff.register', 'uses' => 'Auth\[email protected]' ]);
Route::group([ 'middleware' => [ 'staff' ] ], function() {
Route::get('/admin', '[email protected]')->name('admin');
});
Route::get('/home', '[email protected]')->name('home');
変化なしを。まだ動作しません。
thuslyルートを変更しようとしました( 'スタッフのミドルウェアにすべての管理ルートを置く: のAuth ::ルート();同じ
// staff authentication routes
Route::group([ 'middleware' => [ 'staff' ] ], function() {
Route::get('admin/login', 'Auth\[email protected]');
Route::post('admin/login', [ 'as' => 'staff.login', 'uses' => 'Auth\[email protected]' ]);
Route::get('admin/register', 'Auth\[email protected]');
Route::post('admin/register', [ 'as' => 'staff.register', 'uses' => 'Auth\[email protected]' ]);
Route::get('/admin', '[email protected]')->name('admin');
});
Route::get('/home', '[email protected]')->name('home');
同じようにまだ動作しません。
コントローラから削除しようとしました。私はまだ/ admin/loginの代わりに/ loginにリダイレクトされてしまいます。 – swp
私は$ this-> middleware( 'staff')にその行を変更しようとしましたが、それは同じ効果がありました。私はまだ/ login – swp
に行きます。スタッフ登録とログインルートはまだWebミドルウェアを使用しています.Web.phpファイルのWebミドルウェアからそれらを分離しようとしています – HasilT