多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] Laravel 的 API 认证提供了两种方式,一时使用 passport package,二是使用 token 来进行认证, # api_token 配置看下config/auth.php中 ~~~ 'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\Models\User::class, //看下自己的用户表是不是这个 ], ~~~ 在vendor/laravel/framework/src/Illuminate/Auth/TokenGuard中 在构造方法中可以看到api_token 在下面可以看到token的验证过程,最后执行的是getTokenForRequest 源码解读(laravel5.4) ~~~ public function getTokenForRequest() { //首先通过query方式获取这个inputKey,这个inpuKkey在构造方法里面就是api_token,也就是get获取 $token = $this->request->query($this->inputKey); if (empty($token)) { $token = $this->request->input($this->inputKey); } //如果没有的话,通过bearerToken获取就是header方式获取 //我们去看下 if (empty($token)) { $token = $this->request->bearerToken(); } if (empty($token)) { $token = $this->request->getPassword(); } return $token; } ~~~ ~~~ public function bearerToken() { $header = $this->header('Authorization', ''); if (Str::startsWith($header, 'Bearer ')) { return Str::substr($header, 7); } } ~~~ 方式还是很多的 然后我们在用户表中添加个字段api_token,然后把长度设置为60(长度最好大于7位),我们在用户注册的时候,给这个字段来个随机数的填充进去 然后我们传递token的时候,在header中 ~~~ [{"key":"Authorization","value":"Bearer S73tCcDwmlqw5dL31"}] ~~~ value就是Bearer加空格加后面的数据库的api_token 中间件可以用 ~~~ ['middleware'=>'auth:api'] ~~~ 登录进来获取用户信息可以用 ~~~ return \Illuminate\Support\Facades\Auth::guard('api')->user(); ~~~ # sign 如果需要生成签名可以这样 签名参数sign生成的方法 第1步: 将所有参数(注意是所有参数),除去sign本身,以及值是空的参数,按参数名字母升序排序。 第2步: 然后把排序后的参数按参数1值1参数2值2…参数n值n(这里的参数和值必须是传输参数的原始值,不能是经过处理的,如不能将"转成”后再拼接)的方式拼接成一个字符串。 第3步: 把分配给接入方的验证密钥key拼接在第2步得到的字符串前面。 第2步: 在上一步得到的字符串前面加上验证密钥key(这里的密钥key是接口提供方分配给接口接入方的),然后计算md5值,得到32位字符串,然后转成大写. 第4步: 计算第3步字符串的md5值(32位),然后转成大写,得到的字符串作为sign的值。