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 协议》,转载必须注明作者和本文链接
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!