iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 4
1
Software Development

PHP新手30天實戰金流系列 第 4

[Day4] Laravel 6 API Versioning + Email Verification

tags: PHP新手30天實戰金流, Laravel

增加 Controller 版本

  1. 執行 php artisan make:controller Api/v1/PersonController 新增 controller
    舊的目錄:

    新的目錄:

  2. 將舊的 Controller 的程式碼貼到新的 controller裡,然後刪掉

  3. route/api.php中, 原本 Controller 的路徑加上 Api\v1

  4. 測試:http://localhost:8000/api/person/3

增加 Resource 版本

  1. 執行php artisan make:resource v2/PersonResourcephp artisan make:controller Api/v2/PersonController
  2. 稍微變動: resource 回傳的格式
    public function toArray($request)
    {
        return [
            'info' => $this->last_name .' '. $this->email,
            'pwd' => $this->password,
        ];
    }
    
  3. 在 v2 的 PersonController 中加:
    use App\Http\Resources\v2\PersonResource;
    use App\Person;
    
    然後寫一個簡單的方法(show):
        class PersonController extends Controller
    {
        public function show(Person $person): PersonResource
        {
            return new PersonResource($person);
        }
    }
    
  4. 測試:http://localhost:8000/api/v2/person/3,完成!


Email Verification

當我們使用 Laravel 6 提供的 Auth 套件做內建的 user model 的身份驗證時,需要經過信箱確認 user 才能成功登入。因此我們將信箱確認的流程加進我們的平台中。

Step 1

首先在環境檔設定我們要使用的 email server 。 沙拉是到 mailtrap 註冊一個測試用的email,免費方案可以有500封。

  • 在檔案.env 中依照註冊的信箱設定 Mail Driver

    MAIL_ENCRYPTION=tls
    

Step 2

app/User.php 中,加 implements MustVerifyEmail,讓我們的 User 類別實作認證信箱的介面

class User extends Authenticatable implements MustVerifyEmail
{}

Step 3

  • app/Http/Controllers/HomeController.php
    1. __construct()裡的 middleware 加 'verified'
    2. 在 index 函式裡,區分管理者和一般使用者轉址到不同路由 (應該有更好的做法,不過莎拉目前還沒很熟悉框架,煩請各位大大不吝分享寶貴建議 <3 )
use App\User;
public function __construct()
    {
        $this->middleware(['auth','verified']);
    }
    
public function index()
    {
        $user = auth()->user();
        echo $user->name;
        if ($user->name =="sarah"){
            return view('admin/new_object');
        }else{
            return view('customer/shopping_mall');
        }
        
    }

Step 4

  • routes/web.php
Auth::routes(['verify' => true]);

Step 5

  • routes/api.php 將我們想要有經過身份驗證才能訪問的頁面都設定在中介層之後
Route::group(['middleware' => 'auth:api'], function () {
    Route::get('/person/{person}');
    Route::get('/test_shop/new_object');
    });    

Step 6

註冊帳號後,到測試信箱收驗證信

Step 7

  • 我們有了登入後,在 resources/views/master.blade.php 加登出功能
<a href="{{ route('logout') }}" onclick="event.preventDefault();
                        document.getElementById('logout-form').submit();">
    {{ __('Logout') }}
</a>

<form id="logout-form" action="{{ route('logout') }}" method="POST" style="display: none;">
    @csrf
</form>

OK 今天先到這裡! 第五天會實作一點點前端 Shopping 的部分!

晚生學習分享所學經驗,若內容有誤或不清楚,煩請不吝指教!更是歡迎各位大神多多補充,感謝萬分!


上一篇
[Day3] Laravel 6 API : Store & Update & Delete
下一篇
[Day5] FRONTEND(blade) + Route name
系列文
PHP新手30天實戰金流34

尚未有邦友留言

立即登入留言