首頁  >  文章  >  後端開發  >  如何在Laravel 5.6中設定多個身份驗證

如何在Laravel 5.6中設定多個身份驗證

藏色散人
藏色散人原創
2019-01-21 09:24:513436瀏覽

在本文中,我們將介紹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步:設定模型和遷移

為管理員Admin建立和設定模型和遷移:

php artisan make:model Admin -m

要為Admin設定模型,請前往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',
    ];

要為Admin設定遷移表,請前往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:設定管理員控制器

要為Admin建立控制器,請執行下列指令:

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步:為管理員使用者設定登入控制器

#要建立Login控制器,請執行以下命令:

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步:為管理員設定登入視圖

要為Admin建立和設定登入視圖,請前往resources / views / auth /並建立一個新檔案admin-login.blade.php。複製resources / 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步:設定管理員的主視圖

要為Admin建立和設定主視圖,請前往resources / views /並建立一個新檔案admin-home.blade.php。複製resources / 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 / Handler.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步:設定資料庫遷移預設字串Lenth

要設定資料庫遷移的預設字串長度,請前往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專案中輕鬆設定多個身份驗證。

以上是如何在Laravel 5.6中設定多個身份驗證的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn