1、当Laravel使用多用户表api认证时,极容易因为默认guard为api导致认证失败(本人admin)
方案一:修改auth.defaults.guard 为 'admin'
此方案导致我的web默认变成admin用户验证,还需要再做一堆处理…于是…
方案二:添加认证中间件
public function handle($request, Closure $next, ...$guards)
{
if( strpos($request->route()->getName(), 'passport')!==false ) {
config(['auth.defaults.guard' => 'admin']);
}
$this->authenticate($request, $guards);
return $next($request);
}
2、前后分离小应用
前后分离后端:添加中间件,自动生成laravel_token
protected $middlewareGroups = [
'web' => [
...
\Laravel\Passport\Http\Middleware\CreateFreshApiToken::class,
],
前后分离前端请求示例(注意不要直接复制下面代码,wp的引号自动替换成中文引号,我自己被自己的复制坑了半天时间)
$.ajax({
type: "GET",
url: '{{ url('/api/user') }}',
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
dataType: 'json',
success: function(res) {
console.log(res);
}
});
应用外请求token
$.ajax({
type: "POST",
url: '{{ url('/oauth/personal-access-tokens') }}',
data: {name: 'Token Name'},
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
dataType: 'json',
success: function(res) {
console.log(res);
}
});
3、关于api_token认证
需要做接口登录换取token过程
建议一步到位,直接laravel/passport,用法更普遍,更强大,更标准
4、关于client_uuids
开启client_uuids = true记得要把id字段设置为varchar,原有id是自增的bigint
同时当
php artisan passport:install
生成client_id时可能会要求 "128-bit integer; Moontoast\Math\BigNumber is required. "
composer require moontoast/math
5、redirect_uri是oauth必须验证的一个参数,所以一定要保持参数与client设置的一致
6、Oauth支持的5类 grant_type 及说明
authorization_code — 授权码模式(即先登录获取code,再获取token)
password — 密码模式(将用户名,密码传过去,直接获取token)
client_credentials — 客户端模式(无用户,用户向客户端注册,然后客户端以自己的名义向’服务端’获取资源)
implicit — 简化模式(在redirect_uri 的Hash传递token; Auth客户端运行在浏览器中,如JS,Flash)
refresh_token — 刷新access_token
7、遇到直接使用php artisan passport:install生成的Clinet无法通过authorization_code认证,
默认生成:Personal Access Client 或 Password Grant Client
通过新建Client解决
php artisan passport:client
8、
9、
10、
其它未完待续