iT邦幫忙

2021 iThome 鐵人賽

DAY 13
0
永豐金融APIs

釋放你的潛能用技能交易吧!系列 第 13

[Day13] 第十三章-完成登入API (產生jwt token給前端使用)

  • 分享至 

  • xImage
  •  

前言

前面我們完成了註冊相關的api
今天我們接續完成登入吧!!
今天的目標除了是使用laravel 提供的Auth函式
我們也可以使用jwt套件完成

勘誤


app/models/user.php

我發現之前Class引用錯了
我前面打成laravel的Sanctum
use Laravel\Sanctum\HasApiTokens;
這個會導致後面要產生呼叫錯誤
不會產生JWTtoken

我們修正一下改成Passport的Class

use Laravel\Passport\HasApiTokens;

補充

在開始之前想跟大家推薦一個套件(偵測路徑使用)

PHP Intelephense

之前我裝一大堆大件所以沒有發現
現在是新環境而且不是phpstrom這種內建邦你包好很多plugin的IDE
會遇到我在key一些laravel class找不到相關路徑提示字(尤其laravel超多class.....)
有時候找key又臭又長的class真的會很想哭/images/emoticon/emoticon02.gif

來給各位看一下前後比對

這邊是沒有安裝套件的

接者是有安裝套件的

實作

1.測試laravel Auth::attemp登入驗證函式

先把我們之前的authcontroller打開吧!
app/http/controllers/AuthController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests\CreateUser;
use App\models\User;
use Illuminate\Support\Facades\Auth; //新增auth函式

class AuthController extends Controller
{
    //
    public function signup(CreateUser $request)
    {
        $validateData = $request->validated();
        $user = new User([
            'name'=> $validateData['name'],
            'email' =>$validateData['email'],
            'password' => bcrypt($validateData['password']),
        ]);
        $user->save();
        return response($user,201);
    }
    public function login(Request $request)
    {
        $validateData = $request->validate([
            'email' => 'required|string|email',
            'password' => 'required|string'
        ]);
        if(!Auth::attempt($validateData)){
            return response('登入失敗',401);
        }
        $user = $request->user();
        return $user;
    }
}

小常識 Illuminate 是燈光的意思。laravel開發者希望laravel提供的套件模組向燈光一樣指引我們開發者喔!

新增程式碼:

  • 這邊我們新增了laravel 提供的Auth Class它提供了取多登入的驗證還有授權function使用
  • 新增了login這個function並且透過attemp來驗證使用者
  • 我們一樣透過validate這個驗證function驗證前端的request判別是否資料符合型態

小知識: laravel 在做完auth認證成功時 會在$request物件裡面新增user資料

都完成後我們來把route補齊
routes/web.php

Route::post('login','AuthController@login');

補上我們的login路由

最後我們使用昨天註冊的會員資料來驗證結果吧!
帳號:roni@gmail.com
密碼:12345678

先測試一下錯誤示範
密碼先故意打錯

成功會長這樣

有沒有很神奇呢!?
laravel自動把 user 物件挖出來了!!

安裝jwt套件

首先我們先安裝 jwt套件

composer require lcobucci/jwt

如果你跟我一樣是比較新的laravel版本(8.1後)
可能會遇到一些錯誤我們一一解決吧!!


這邊有兩個小問題要解決

  1. 相依套件可一起升級(-W在安裝套件可加此參數升級套件)
  2. 修改php.ini(把擴充sodium打開)

如果你跟我一樣是xampp安裝有福了就不需要很辛苦地找他位置在哪
我們把xampp打開 congfig裡面的php.ini

打開後把分號註解拿掉儲存即可!!

最後會長這樣

看到這畫面代表成功了(灑花)!

/images/emoticon/emoticon01.gif

工程師會常常遇到錯誤也不要氣餒
每次成功後的喜悅跟成就感會幫助自己成長喔!!

3.產生jwt token

最後我們一口氣做完吧

最後把login function修改成這樣

    public function login(Request $request)
   {
       $validateData = $request->validate([
           'email' => 'required|string|email',
           'password' => 'required|string'
       ]);
       if(!Auth::attempt($validateData)){
           return response('登入失敗',401);
       }
       $user = $request->user();
       $token = $user->createToken('Token');
       // dd($token);
       $token->token->save();
       return response(['token'=>$token->accessToken]);
   }

createToken函式是在我們user Model裡面引入得Passpoer HasAPI也就是我前面勘誤的Class
所以前面才說如果這邊錯了要跟者我修正喔XD

接者我們可以使用postman來測試api

總結

今天使用做完登入
並且產生jwt token來做登入使用
有興趣的人可以把token
丟到
jwt官網去解析喔
https://jwt.io/

他主要的目的會幫助你做好簽章(驗證token安全性)
以及包裝一些常用資料


上一篇
[Day12] 第十二章-完成註冊API 修改route,controller,model(使用passport認證)
下一篇
[Day14] 第十四章-使用JWT token來驗證user跟登出api
系列文
釋放你的潛能用技能交易吧!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言