286 views
# Authentication in Laravel ###### tags: `MCL` `web` # Laravel 10.x ### Web ```bash ./vendor/bin/sail composer require laravel/breeze --dev ./vendor/bin/sail artisan breeze:install vue ./vendor/bin/sail npm install ./vendor/bin/sail npm build ./vendor/bin/sail artisan migrate ``` ### API # Laravel 5.8 References ~ * https://laravel.com/docs/5.8/authentication * https://laravel.com/docs/5.8/migrations Laravel 內建有帳戶系統,因此我們可以透過官方指引快速地部署出簡易的帳戶系統。 > 留意 Laravel 不同版本的部署方法可能不同,此文章適用版本為 5.8 ## 前置一:phpMyAdmin 視覺化資料庫控制平台 * 如果簡單一點來說,資料庫 (Database) 就像一個 Excel 檔,裡面有很多個資料表 (Table)。 * 放了很多個資料庫的平台就是 MySQL 在做的事情。 * 如果你要直接控制 MySQL 的話,你可以透過終端機介面然後下 SQL 指令,但這很慘忍。 * 所以你可以用 phpMyAdmin,他是網頁上視覺化的控制平台,操作上會比較好理解一點。 ### 連上已經架好的 phpMyAdmin * 服務網址:http://your-ip:8888 然後在登入選項裡面輸入 * Server: 服務 (容器) 的名稱 (在 `docker-compose.yml` 檔裡面) * Username: `root` * Password: ROOT 的密碼 (在 `docker-compose.yml` 檔裡面) ## 前置二:設定 Laravel 連線到資料庫伺服器的設定 * Laravel 的環境設定檔為 `.env`,在最早啟動專案的時候就會建立了。 * 根據 `docker-compose.yml` 設定檔,我們是使用 MySQL 當作資料庫伺服器的軟體,所以我們在 `.env` 的 MySQL 部分做修改: ```txt DB_CONNECTION=mysql # SQL Server 使用的軟體 DB_HOST=mysql # 連線到 SQL Server 的主機名稱,根據 docker-compose.yml 的設定 DB_PORT=3306 # SQL Server 的埠通常都是他,docker-compose.yml 的設定也是這麼寫的 DB_DATABASE=your-db-name # 資料庫的名稱,根據 docker-compose.yml 的設定 DB_USERNAME=root # 帳號 DB_PASSWORD=password # root 密碼,根據 docker-compose.yml 的設定 ``` 設定完成後,嘗試使用 `artisan` 指令確定一下可不可以使用: ```bash php artisan migrate ``` > 該有的前綴詞別忘 如果順利的話,他會產生下面的結果: ```txt Migration table created successfully. Migrating: 2014_10_12_000000_create_users_table Migrated: 2014_10_12_000000_create_users_table (0.06 seconds) Migrating: 2014_10_12_100000_create_password_resets_table Migrated: 2014_10_12_100000_create_password_resets_table (0.02 seconds) ``` 這個動作叫做**遷移 (Migrate)**,他會把所有設定好的資料表 (table) 移植到伺服器上面去,也就是透過 Laravel 去控管資料庫上的資料表。 設定這些資料表的地方在 `database/migrations` 資料夾底下,你可以看到已經有兩個檔案在裡面了。 執行完遷移動作後,你可以去 phpMyAdmin 看看,這時候你會多出三個資料表出來: * `migrations`: 紀錄有哪些 table 在上面 (總是會有) * `users`: 使用者資料表 * `password_resets`: 忘記密碼的時候會記錄一些 token (這次不會使用到) > 更多 Migrations 指令可以參考官方網站的說明: > https://laravel.com/docs/5.8/migrations ## 套用 Laravel 內建的帳戶系統 ### Step. 1 遷移資料表 因為剛剛在測試連線的時候已經遷移過了,所以這部跳過~ ### Step. 2 啟用帳戶系統模塊 :::warning <i class="fa fa-warning"></i> 這一步在 Laravel 6+ 後版本會不太一樣,使用前要確定一下你的版本。 ::: 雖然他內部已經寫好了,不過完整功能 Laravel 是不會幫你開起來的,所以你需要透過指令去啟動他們。 一樣是透過 `artisan` 驅動,指令如下: ```bash php artisan make:auth ``` 這個指令會做這些事情: * 新增路由到 `routes/web.php` * 新增視圖 (View) 到 `resources/views` 底下 這步驟完成後,你也已經成功設定好內建帳戶系統了。這個時候你可以去 Laravel 首頁查看,在右上角會有登入跟註冊這兩個按鈕,都是可以使用的。 ### 架構細節 * 通過 Auth 路由進去後,他會導向到對應的 Controller function (在 `app/Http/Controllers/Auth` 底下),經過邏輯處理後回傳試圖,這個流程就跟上週講的是一樣的。 * 而在所謂的「邏輯處理」當中,他會去存取資料庫,存取資料庫的時候他會透過 Model 去存取 (官方給他的名字是 ORM, Object-Relational Mapping) * 在帳戶系統的例子裡,他使用的是 `app/User.php` ## 帳戶中介層 ```php Route::group(['middleware' => 'auth'] function () { Route::get('...', '...@...'); // ... }); ```