前面我們完成了註冊相關的api
今天我們接續完成登入吧!!
今天的目標除了是使用laravel 提供的Auth函式
我們也可以使用jwt套件完成
在
app/models/user.php
我發現之前Class引用錯了
我前面打成laravel的Sanctum
use Laravel\Sanctum\HasApiTokens;
這個會導致後面要產生呼叫錯誤
不會產生JWTtoken
我們修正一下改成Passport的Class
use Laravel\Passport\HasApiTokens;
在開始之前想跟大家推薦一個套件(偵測路徑使用)
之前我裝一大堆大件所以沒有發現
現在是新環境而且不是phpstrom這種內建邦你包好很多plugin的IDE
會遇到我在key一些laravel class找不到相關路徑提示字(尤其laravel超多class.....)
有時候找key又臭又長的class真的會很想哭
來給各位看一下前後比對
這邊是沒有安裝套件的
接者是有安裝套件的
先把我們之前的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認證成功時 會在$request物件裡面新增user資料
都完成後我們來把route補齊
routes/web.php
Route::post('login','AuthController@login');
補上我們的login路由
最後我們使用昨天註冊的會員資料來驗證結果吧!
帳號:roni@gmail.com
密碼:12345678
先測試一下錯誤示範
密碼先故意打錯
成功會長這樣
有沒有很神奇呢!?
laravel自動把 user 物件挖出來了!!
首先我們先安裝 jwt套件
composer require lcobucci/jwt
如果你跟我一樣是比較新的laravel版本(8.1後)
可能會遇到一些錯誤我們一一解決吧!!
這邊有兩個小問題要解決
如果你跟我一樣是xampp安裝有福了就不需要很辛苦地找他位置在哪
我們把xampp打開 congfig裡面的php.ini
打開後把分號註解拿掉儲存即可!!
最後會長這樣
看到這畫面代表成功了(灑花)!
工程師會常常遇到錯誤也不要氣餒
每次成功後的喜悅跟成就感會幫助自己成長喔!!
最後我們一口氣做完吧
最後把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安全性)
以及包裝一些常用資料