# 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('...', '...@...');
// ...
});
```