昨天把passport套件安装完
今天试者把model,route,controller设定完
前置作业做完後
我们要开始改里面的档案了
config/auth.php
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'passport',
'provider' => 'users',
guard 里面 新版只有web後面补上api并且driver 改成passport
这边是决定我们的api路由认证要使用哪个套件
app/providers/AuthServiceProvider.php
<?php
namespace App\Providers;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Gate;
use Laravel\Passport\Passport; //补上这行
class AuthServiceProvider extends ServiceProvider
{
/**
* The policy mappings for the application.
*
* @var array
*/
protected $policies = [
// 'App\Models\Model' => 'App\Policies\ModelPolicy',
];
/**
* Register any authentication / authorization services.
*
* @return void
*/
public function boot()
{
$this->registerPolicies();
//
Passport::routes(); //补上这行
}
}
这边定义passport的配置
app/models/user.php
<?php
namespace App\Models;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens; //补这行
class User extends Authenticatable
{
use HasApiTokens, HasFactory, Notifiable; //补这行
/**
* The attributes that are mass assignable.
*
* @var string[]
*/
protected $fillable = [
'name',
'email',
'password',
];
/**
* The attributes that should be hidden for serialization.
*
* @var array
*/
protected $hidden = [
'password',
'remember_token',
];
/**
* The attributes that should be cast.
*
* @var array
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
}
这边如果是新版的laravel应该会自动帮你补上
但如果没有就自行补上吧!!
最後我们要验证前端传过来的资讯
这时候就可以使用laravel 的request
详细文件可以参考
laravel request文件
这个功能可以自行自做前端传过来的request资料要做什麽样的验证!!
这边我会自行新增两个request验证
分别是
第一个APIrequest
首先先下指令
php artisan make:request APIRequest
接者我们会再
app/http/requests/apirequest.php看到
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Http\Exceptions\HttpResponseException; //可以回传http错误的讯息
use Illuminate\Contracts\Validation\Validator;
class APIRequest extends FormRequest
{
protected function failedValidation(Validator $validator) {
// write your business logic here otherwise it will give same old JSON response
throw new HttpResponseException(response()->json($validator->errors(), 400));
}
}
很方便的函式如果我们使用这个class
可以把http错误讯息丢回去前端
接者透过指令建立 CreateUser的验证
php artisan make:request CreateUser
<?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 [
//
'name' =>'required|string',
'email' => 'required|string|unique:users',
'password' => 'required|string|confirmed'
];
}
}
这边要注意的第一点是我们要继承APIRequest来帮助我们如果遇到错误
会直接回传前端
接者在rules里面
我们可以自行定义资料是否符合规范
php artisan make:controller AuthController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests\CreateUser; //引入我们建立好的验证器
use App\models\User; //引入user model
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);
}
}
这边我们使用createUser取代Request class来当作验证器
接者如果验证成功的资料
我们再新建一个user 物件 储存置资料库里
bcrypt 可以帮助我们hash密码防止密码明文显示造成资安疑虑
第一次测试我们先故意输入错误的password_confirmation看看吧!!
结果验证器有成功帮我们抓出password不符合
并且有吐回去前端让我们看到错误讯息
接者来打一次正确的资料吧!!
这样就完成了喔!!
今天总算把昨天的注册部分API完成了
希望大家会喜欢!
>>: 离职倒数4天:驱动美丽新世界的重要力量就是消费,就是要让人不断想买东西
上午:Python程序设计 早上学习function, *args, *kwargs, 全域变数 &...
先来张时代的眼泪 图片来源(官网资料) 最原始的实体主机一台一台设定环境:纯手工,因为硬体配置都是固...
在解析this的方式箭头函式与函式宣告不同,函式宣告是以呼叫时的方式来决定,而箭头函式在建立时就会决...
Nest 在大多数情况下是采用 单例模式 (Singleton pattern) 来维护各个实例,也...
首先,我这个的作法跟其他不太一样! 我在原有的storyboard,拉了tableviewcontr...