會員註冊要安裝
在terminal下指令composer require laravel/passport --with-all-dependencies
顯示
在terminal下指令php artisan migrate安裝相對資料庫
到資料庫重新整理查看:
在terminal下指令php artisan passport:install
產生必要的檔案
PS C:\Users\jzs2h\Desktop\code\blog> php artisan passport:install
PHP Deprecated: Illuminate\Log\Logger::__construct(): Implicitly marking parameter $dispatcher as nullable is deprecated, the explicit nullable type must be used instead in C:\Users\jzs2h\Desktop\code\blog\vendor\laravel\framework\src\Illuminate\Log\Logger.php on line 43
Encryption keys generated successfully.
Personal access client created successfully.
Client ID: 1
Client secret: CmW1i1GQZo5ekbDL9tWRnqIOhvVVcIRAZnLhTk59
Password grant client created successfully.
Client ID: 2
Client secret: SX3C5sLcOyCpS6VjIMSyTjFoY9vck3V5C1DK57Q9
修改User程式碼:
修改前:
修改後:
加入套件:此為原來就有寫
先改成跟老師的 1樣use Laravel\Passport\HasApiTokens;
AuthServiceProvider修改前程式碼
修改後加入套件: use Laravel\Passport\HasApiTokens;
往下拉修改程式碼Passport::routes();
<?php
namespace App\Providers;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Gate;
use Laravel\Passport\HasApiTokens;
class AuthServiceProvider extends ServiceProvider
{
/**
* The policy mappings for the application.
*
* @var array<class-string, class-string>
*/
protected $policies = [
// 'App\Models\Model' => 'App\Policies\ModelPolicy',
];
/**
* Register any authentication / authorization services.
*
* @return void
*/
public function boot()
{
$this->registerPolicies();
//
Passport::routes();
}
}
修改auth.php 程式碼
修改前程式碼
修改後程式碼
加入'api' => [
'driver' => 'passport',
'provider' => 'users',
'hash' => false,
],
用指令php artisan make:controller AuthController
加入controller
修改AuthController程式碼:建立會員資料
會員資料的驗證
先下指令: php artisan make:request CreateUser
在request資料夾下面產生檔案CreateUser
CreateUser自動產生的程式碼:
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class CreateUser extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return false;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
//
];
}
}
修改程式碼內容:
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class CreateUser extends APIRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
//
];
}
}
對照users資料表寫rules
繼續修改CreateUser程式碼內容:
'email' => 'required|string|email|unique:users',其中email的unique表示唯一
'password' => 'required|string|confirmed'其中password的confirmed'表示密碼輸入後,再次確認
修改AuthController程式碼:
修改前程式碼:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class AuthController extends Controller
{
//
public function signup(Request $request)
{
$form = $request->all();
}
}
修改後程式碼:
加入套件
密碼使用bcrypt去加密
設定 路由
在terminal執行php artisan serve
用POSTMAN測試
到資料庫查看
再註冊一次會說EMAIL已使用過
AuthController加入登入的通行證:
修改前的程式碼:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests\CreateUser;
use App\Models\User;
class AuthController extends Controller
{
//
public function signup(CreateUser $request)
{
$validatedData = $request->validated();
$user = new User([
'name' => $validatedData['name'],
'email' => $validatedData['email'],
'password' => bcrypt($validatedData['password'])
]);
$user->save();
return response('success', 201);
}
}
修改後的程式碼:
加入套件:
加入程式碼:
擴充路由:
<?php
use Illuminate\Support\Facades\Route;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::get('/', function () {
return view('welcome');
});
Route::resource('products', 'ProductController');
Route::resource('carts', 'CartController');
Route::resource('cart-items', 'CartItemController');
Route::post('signup','AuthController@signup');
Route::post('login','AuthController@login');
在terminal重新啟動php artisan serve
用POSTMAN測試錯誤的帳號密碼
POSTMAN輸入正確的:
修改程式碼:帶出裡面的資料
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests\CreateUser;
use App\Models\User;
use Illuminate\Support\Facades\Auth;
class AuthController extends Controller
{
//
public function signup(CreateUser $request)
{
$validatedData = $request->validated();
$user = new User([
'name' => $validatedData['name'],
'email' => $validatedData['email'],
'password' => bcrypt($validatedData['password'])
]);
$user->save();
return response('success', 201);
}
public function login(Request $request)
{
$validatedData = $request->validate([
'email' => 'required|string|email',
'password' => 'required|string'
]);
if(!Auth::attempt($validatedData)){
return response('授權失敗',401);
}
$user = $request->user();
//dd($user);
}
}
無法顯示圖片的部分~再麻煩將連結貼上就可以看到了喔
帶出裡面的資料:要選Preview看
將createToken複製貼上到
用指令去調整token下指令: composer require lcobucci/jwt:3.3.3
再terminal下指令去啟動: php artisan serve
修改程式碼:
用POSTMAN查看
修改程式碼存入資料庫:
用POSTMAN查看
第4章的單元13的10:36看不到跟老師一樣的TOKEN畫面(已提問)
到https://jwt.io/網站
貼上token:顯示裡面的資料
oauth_access_tokens資料表也可以看到:
oauth_personal_access_clients資料表也可以看到:
oauth_clients資料表也可以看到:
oauth_access_tokens資料表記錄主要資料:
大家明天見~