ホームページ >バックエンド開発 >PHPチュートリアル >Laravel 5.6で複数の認証を設定する方法

Laravel 5.6で複数の認証を設定する方法

藏色散人
藏色散人オリジナル
2019-01-21 09:24:513498ブラウズ

この記事では、Laravel 5.6 の複数認証について説明します。ここでの複数認証は、複数のユーザー モデルに対して認証を行うプロセスにすぎません。

Laravel 5.6で複数の認証を設定する方法

#次のセクションでは、Laravel の組み込み認証機能を説明します。具体的には、管理者ユーザーと通常ユーザーの両方を認証する方法を説明します。

ステップ 1: Laravel のセットアップ

composer を使用して Laravel プロジェクトをセットアップします。

composer create-project --prefer-dist laravel/laravel project-name

ステップ 2: データベース構成

.env ファイルを開き、ファイルにデータベース資格情報を設定します。

DB_DATABASE= database-name
DB_USERNAME= root
DB_PASSWORD= database-password

ステップ 3: 認証

Laravel の組み込み認証システムを使用して登録してログインするには、次のコマンドを実行するだけです:

php artisan make:auth

ステップ 4: モデルと移行のセットアップ

管理者用のモデルと移行の作成とセットアップ:

php artisan make:model Admin -m

管理者用のモデルをセットアップするには、app/Admin.php に移動します。そして、次のコードでコードを更新します:

/**
 * Remove 'use Illuminate\Database\Eloquent\Model;'
 */
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class Admin extends Authenticatable
{
    use Notifiable;
// The authentication guard for admin
    protected $guard = 'admin';
     /**
      * The attributes that are mass assignable.
      *
      * @var array
      */
    protected $fillable = [
        'email', 'password',
    ];
     /**
      * The attributes that should be hidden for arrays.
      *
      * @var array
      */
    protected $hidden = [
        'password', 'remember_token',
    ];

管理者用の移行テーブルを設定するには、database/migration/***_create_admins_table.php に移動し、次のコードでコードを更新します:

//
{
    Schema::create('admins', function (Blueprint $table) {
            $table->increments('id');
            $table->string('email')->unique();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
    });
 }
//

ステップ 5: 管理者コントローラーのセットアップ

管理者用のコントローラーを作成するには、次のコマンドを実行します。

php artisan make:controller AdminController

コントローラーをセットアップするには、次の場所に移動します。 app/Http/Controllers/AdminController.php を開き、次のコードでコードを更新します:

class AdminController extends Controller{    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {        $this->middleware('auth:admin');
    }
    /**
     * Show the application dashboard.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {        return view('admin');
    }}

ステップ 6: 管理者ユーザーのログイン コントローラーを設定します

Toログイン コントローラーを作成するには、次のコマンドを実行します。

php artisan make:controller Auth/AdminLoginController

ログイン コントローラーを設定するには、app/Http/Controllers/Auth/AdminLoginController.php に移動し、次のコードでコードを更新します。

use Illuminate\Http\Request;use App\Http\Controllers\Controller;use Illuminate\Foundation\Auth\AuthenticatesUsers;use Illuminate\Support\Facades\Auth;class AdminLoginController extends Controller{    /**
     * Show the application’s login form.
     *
     * @return \Illuminate\Http\Response
     */
    public function showLoginForm()
    {        return view(’auth.admin-login’);
    }
    protected function guard(){        return Auth::guard('admin');
    }
    
    use AuthenticatesUsers;    /**
     * Where to redirect users after login.
     *
     * @var string
     */
    protected $redirectTo = '/admin/dashboard';    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {        $this->middleware('guest:admin')->except('logout');
    }}

ステップ 7: 通常ユーザー用のログイン コントローラーをセットアップする

通常ユーザー用にログイン コントローラーをセットアップするには、app/Http/Controllers/Auth/LoginController.php に移動し、次のコードで更新します。 コード:

///**
 * Show the application's login form.
 *
 * @return \Illuminate\Http\Response
 */public function showLoginForm(){    return view('auth.login');}//

ステップ 8: 管理者用のログイン ビューを設定する

管理者用のログイン ビューを作成して設定するには、リソース/ビューに移動します。 /auth/ および新しいファイル admin-login.blade.php を作成します。 resource/views/auth/login.blade.php からコードをコピーし、新しいファイルに貼り付けます。

次に、次の内容で新しいファイルを更新します。

// 
<div class="card-header">{{ __(&#39;Admin Login&#39;) }}</div>
<div class="card-body">
  <form method="POST" action="{{ route(&#39;admin.login.submit&#39;) }}">
//

ステップ 9: 管理者のホーム ビューを設定する

ホーム ビューを作成して設定するには管理者ビューの場合は、resources/views/ に移動し、新しいファイル admin-home.blade.php を作成します。 resource/views/home.blade.php のコードをコピーし、新しいファイルに貼り付けます。

次に、次の内容で新しいファイルを更新します。

// 
<div class="card">
   <div class="card-header">Admin Dashboard</div>
//

ステップ 10: Web アプリケーション ルーティングを設定する

アプリケーション用に Web を設定するにはルートの場合は、routes/web.php に移動し、次のコードでコードを更新します。

//
Route::get(&#39;/&#39;, function () {
    return view(&#39;layouts.app&#39;);
});
Route::prefix(&#39;admin&#39;)->group(function() {
    Route::get(&#39;/login&#39;, &#39;Auth\AdminLoginController@showLoginForm&#39;)->name(&#39;admin.login&#39;);
    Route::post(&#39;/login&#39;, &#39;Auth\AdminLoginController@login&#39;)->name(&#39;admin.login.submit&#39;);
    Route::get(&#39;/home&#39;, &#39;AdminController@index&#39;)->name(&#39;admin.home&#39;);
});
//

ステップ 11: 例外ハンドラーを設定する

例外を設定するにはハンドラー、app/Exceptions/Hanler.php に移動し、次のコードでコードを更新してください:

//
use Illuminate\Auth\AuthenticationException;
//
//
protected $dontReport = [
     \Illuminate\Auth\AuthenticationException::class,
     \Illuminate\Auth\Access\AuthorizationException::class,
     \Symfony\Component\HttpKernel\Exception\HttpException::class,
     \Illuminate\Database\Eloquent\ModelNotFoundException::class,
     \Illuminate\Session\TokenMismatchException::class,
     \Illuminate\Validation\ValidationException::class,
];
//
//
public function render($request, Exception $exception)
{
    return parent::render($request, $exception);
}
    /**
     * Convert an authentication exception into an unauthenticated response.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Illuminate\Auth\AuthenticationException  $exception
     * @return \Illuminate\Http\Response
     */
 protected function unauthenticated($request, AuthenticationException $exception)
 {
    if ($request->expectsJson()) {
     return response()->json([&#39;error&#39; => &#39;Unauthenticated.&#39;],401);
    }
     $guard = array_get($exception->guards(), 0);
      switch ($guard) {
        case &#39;admin&#39;: $login = &#39;admin.login&#39;;
        break;
        default: $login = &#39;login&#39;;
        break;
      }
        return redirect()->guest(route($login));
  }

ステップ 12: リダイレクト ミドルウェアをセットアップする

使用する認証後 リダイレクトミドルウェアを設定するには、app/Http/Middleware/RedirectIfAuthenticated.php に移動し、次のコードでコードを更新します。

//
public function handle($request, Closure $next, $guard = null)
{
        switch ($guard) {
            case &#39;admin&#39; :
                if (Auth::guard($guard)->check()) {
                    return redirect()->route(&#39;admin.home&#39;);
                }
                break;
            default:
                if (Auth::guard($guard)->check()) {
                    return redirect()->route(&#39;home&#39;);
                }
                break;
        }
     return $next($request);
}
//

ステップ 13: 認証構成を設定する

認証構成をセットアップするには、config/auth.php に移動し、次のコードでコードを更新します:

//
&#39;defaults&#39; => [
        &#39;guard&#39; => &#39;web&#39;,
        &#39;passwords&#39; => &#39;users&#39;,
    ],
&#39;admins&#39; => [
        &#39;driver&#39; => &#39;eloquent&#39;,
        &#39;model&#39; => App\Admin::class,
    ],
//
//
&#39;guards&#39; => [
        &#39;web&#39; => [
            &#39;driver&#39; => &#39;session&#39;,
            &#39;provider&#39; => &#39;users&#39;,
        ],
        &#39;api&#39; => [
            &#39;driver&#39; => &#39;token&#39;,
            &#39;provider&#39; => &#39;users&#39;,
        ],
        &#39;admin&#39; => [
            &#39;driver&#39; => &#39;session&#39;,
            &#39;provider&#39; => &#39;admins&#39;,
        ],
        &#39;admin-api&#39; => [
            &#39;driver&#39; => &#39;token&#39;,
            &#39;provider&#39; => &#39;admins&#39;,
        ],
    ],
//
//
&#39;providers&#39; => [
        &#39;users&#39; => [
            &#39;driver&#39; => &#39;eloquent&#39;,
            &#39;model&#39; => App\User::class,
        ],
       &#39;admins&#39; => [
            &#39;driver&#39; => &#39;eloquent&#39;,
            &#39;model&#39; => App\Admin::class,
        ],
    ],
//
//
&#39;passwords&#39; => [
        &#39;users&#39; => [
            &#39;provider&#39; => &#39;users&#39;,
            &#39;table&#39; => &#39;password_resets&#39;,
            &#39;expire&#39; => 60,
        ],
        &#39;admins&#39; => [
            &#39;provider&#39; => &#39;admins&#39;,
            &#39;table&#39; => &#39;password_resets&#39;,
            &#39;expire&#39; => 15,
        ],
    ],

ステップ 14: データベース移行のデフォルトの文字列の長さを設定する

データベース移行のデフォルトの文字列長を設定するには、app/Providers/AppServiceProvider.php に移動し、次のコードでコードを更新します。

use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Schema;

//

public function boot(){
    Schema::defaultStringLength(191);
}

ステップ 15:移行

移行を実行するには、次のコマンドを入力します:

php artisan migrate

パッチを使用して管理者ログイン資格情報を入力します:

php artisan tinker

$admin = new App\Admin
$admin->email = &#39;admin@app.com&#39;
$admin->password = Hash::make(’admin-password’)
$admin->save()

これで簡単に設定できるようになりました。 Laravel プロジェクトで複数の ID を確認してください。

以上がLaravel 5.6で複数の認証を設定する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。