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); } });
$.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
同时当
生成client_id时可能会要求 "128-bit integer; Moontoast\Math\BigNumber is required. "
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解决
8、
9、
10、
其它未完待续