Laravel6 在使用 jwt 认证,最后生成 token 的时候报错

公司要求做一个新项目,只有我一个后端,刚开始撸 laravel,一直没用过,碰到很多问题,说说这个 jwt 多用户认证吧,被卡住了,根据这两个老哥的文章做的 jwt 多用户认证,用的是 laravel6 版本#

Laravel jwt 多表(多用户端)验证隔离
Laravel JWT 多表多用户登录

问题#

根据前面的步骤一步一步来了,但是到了最后,却碰到一个找不到答案的报错,实在无奈了,求助老哥,这个报错该怎么解决,不胜感激
报错:
BadMethodCallException
Method Illuminate\Auth\SessionGuard::factory does not exist.

代码已被折叠,点此展开
马江川 @13753441707
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 15

auth.php 没配置好,,,

defaults 中的 guard 指定为一个 driverjwtguard,,,

5年前 评论

file

不是使用默认的就可以吗?

5年前 评论
largezhou 5年前
mjc123456 (作者) (楼主) 5年前

@largezhou 老哥你说的是这个配置吗

 'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'api' => [
            'driver' => 'jwt',
            'provider' => 'users',
            'hash' => false,
        ],
        'admin' => [
            'driver' => 'jwt',
            'provider' => 'admin',
        ]
5年前 评论
largezhou 5年前
mjc123456 (作者) (楼主) 5年前

上面的认证已经过了,返回 true,但是在最后生成 token 的时候,报了这个错,老哥

return $this->respondWithToken( $token );
5年前 评论
AloneUtopia

你的 respondWithToken()方法中 'expires_in' => auth()->factory()->getTTL() * 60 使用的是默认守卫,没有指定使用 driverjwt 的守卫。

protected function respondWithToken($token)
    {
        return response()->json([
            'access_token' => $token,
            'token_type' => 'bearer',
            'expires_in' => auth()->factory()->getTTL() * 60
        ]);
    }

改为你使用了 jwt 的守卫即可, 如 api, 'expires_in' => auth('api')->factory()->getTTL() * 60

5年前 评论
Jennie

登录用的 auth('api') ,所以你试试在 respondWithToken 这个方法里的 auth 也是用 api 这个守卫。

5年前 评论
mjc123456 (楼主) 5年前

最后怎么解决的?求解

3年前 评论
mjc123456 (楼主) 3年前
return response()->json([
            'access_token' => $token,
            'token_type' => 'bearer',
            'expires_in' => auth()->guard('api')->factory()->getTTL() * 60,
            'user' => auth()->guard('api')->user()
        ]);

變成只要乎要 auth 後面都要指定 guard 為 api

@会飞的蜗牛

3年前 评论