Laravel 5.5 与 Passport 4.0.0 的 一个坑
有一天提了一个问题, Passport JavaScript 消耗你的 API,验证不通过?
我的环境是:
laravel 5.5
passport 4.0.x -dev
php 7.2
那一天,我想在 web 端调用 我在 api.php 写的接口,这样我就不用写两遍了。(懒是第一生产力。)事实证明是可以的,用户信息可以通过 cookie 下的 laravel_token 得到的。
重点是 这里有个 bug ,我当时不知道。
1.passport 4.0.0 需要换成 passport 4.0.x -dev
也就是 composer.json 中
"laravel/passport": "4.0.x-dev",
这告诉了我先看所用 github 中 package 版本 issue 有多重要。
下面的外国友人说了一句很风趣的话。
laravel 5.5 是 LTS ,但是 passport 4.0 不是 。
2.根据提示还需要在 AuthServiceProviders 引入 两行代码,
use Laravel\Passport\Passport;
Passport::withoutCookieSerialization();
3.问题产生原因:
vendor/laravel/passport/src/Guards/TokenGuard.php
decodeJwtTokenCookie()
发现 protected encrypter
vendor/laravel/framework/src/Illuminate/Contracts/Encryption/Encrypter.php
<?php
namespace Illuminate\Contracts\Encryption;
interface Encrypter
{
/**
* Encrypt the given value.
*
* @param string $value
* @param bool $serialize
* @return string
*/
public function encrypt($value, $serialize = true);
/**
* Decrypt the given value.
*
* @param string $payload
* @param bool $unserialize
* @return string
*/
public function decrypt($payload, $unserialize = true);
}
这里错误
$unserialize = true
在 postman 中测试 ,可以正确得到用户信息。
本作品采用《CC 协议》,转载必须注明作者和本文链接