[解決済み] Laravel 5.2 Multi Authを例題付きで解説してくれる人はいませんか?
質問
認証を行おうとしています
ユーザー
と
管理者
フォーム
user
テーブルと
admin
テーブルをそれぞれ作成します。私は
User
モデルはlaravelが提供するものをそのまま使用し、同じものを
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
ここで、Laravelのデフォルトの
AuthController.php
と
PasswordController.php
ファイルが存在します。(名前空間が適宜変更されます)
まず、Laravelのドキュメントには、このように認証中にカスタムガードを指定する方法が記載されていますが、これはうまくいきません。
Laravelのドキュメントには、ガードを使用する別の方法が記載されていますが、これもうまくいきません。
どなたか問題を解決して、間違っていたら訂正していただけると有益です。
解決方法は?
Laravel 5.2のMulti Authを2つのテーブルで動作させることができるようになりました。
Laravel 5.2でMulti Authを実装する方法
上記の通りです。
2つのテーブル
admin
と
users
Laravel 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
2つのメソッドを追加して指定します。
$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
などです。
関連
-
[解決済み] PHP Composerを使ってLaravelからパッケージを削除するにはどうしたらいいですか?
-
[解決済み] Laravelで特定のマイグレーションをロールバックする
-
[解決済み】Laravel Redirect Back with()メッセージ
-
[解決済み】Laravel - モデル、コントローラ、マイグレーションを1つのartisanコマンドで作成する。
-
[解決済み] Laravel Eloquent "WHERE NOT IN" (ララベル・エロクエント "WHERE NOT IN")について
-
[解決済み] php artisan.phpのサーブのポートを設定します。
-
[解決済み] Laravel Eloquent groupBy() ANDは、各グループのカウントも返します。
-
[解決済み] Laravelでリソースコントローラーに新しいメソッドを追加する
-
[解決済み] Laravel - Route::リソースとRoute::コントローラの比較
-
[解決済み] laravelでリクエストパラメータの値を変更する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] PHP Composerを使ってLaravelからパッケージを削除するにはどうしたらいいですか?
-
[解決済み] Laravelで特定のマイグレーションをロールバックする
-
[解決済み】Laravel Redirect Back with()メッセージ
-
[解決済み】Laravel - モデル、コントローラ、マイグレーションを1つのartisanコマンドで作成する。
-
[解決済み] Laravel Eloquent "WHERE NOT IN" (ララベル・エロクエント "WHERE NOT IN")について
-
[解決済み] Eloquentを使用してテーブルのすべての行を削除する方法は?
-
[解決済み] php artisan.phpのサーブのポートを設定します。
-
[解決済み] Laravelでリソースコントローラーに新しいメソッドを追加する
-
[解決済み] Eloquent - と等しくない場合
-
[解決済み] Laravel - Route::リソースとRoute::コントローラの比較