Laravel 的尝试()方法未定义(JWT)

Posted

技术标签:

【中文标题】Laravel 的尝试()方法未定义(JWT)【英文标题】:Laravel attempt() method is undefined (JWT) 【发布时间】:2020-11-27 21:01:26 【问题描述】:

我正在尝试使用 JWT 对 Laravel 中的用户进行身份验证。在我的身份验证控制器中,我有这个登录方法:

public function login(Request $request)
    
        $jwt_token = null;

        $input = $request->only("email", "password");

        if (!$jwt_token = auth('users')->attempt($input)) 
            return response()->json([
                'success' => false,
                'message' => 'invalid email or password'
            ]);
        

        return response()->json([
            'success' => true,
            'token' => $jwt_token,
        ]);
    

但是尝试方法是“未定义的”。如果我使用也会发生同样的情况

auth('users')->JWTAuth::attempt($input)

对此的任何帮助表示赞赏。

【问题讨论】:

请在以后发布此类问题时提供实际错误。测试时我可以看到错误是"Undefined property: Illuminate\\Auth\\SessionGuard::$JWTAuth" - 所以它抱怨的是一个属性,而不是一个方法。 您使用哪个库进行 JWT 身份验证? 现在可以使用了,但它是 tymon/jwt-auth。 @Aejg 我在这里遇到了同样的问题,你是怎么解决的? @LakwinChandula 我四处询问,一致认为 VS 代码(我使用的 IDE)无法识别所有命令(因此红色曲线)并不少见,因为它只对解决这些事情的代码。我的代码运行良好的事实让我相信这很可能是这种情况。 【参考方案1】:

不应该叫auth('users')->JWTAuth::attempt($input);

尝试:auth('users')->attempt($input);

【讨论】:

它仍然给我同样的错误,尝试()是红色下划线,但奇怪的是登录功能工作正常? 当我将鼠标悬停在它上面时,它说:“未定义的方法'尝试'。intelephense(1013)” attempt() 方法仍然有下划线,但实际上工作正常。人们告诉我,这可能是由于 VSCode 的 intelephense 无法识别该方法。【参考方案2】:

其实你可以这样做

Auth::attempt($request->only('email', 'password'));

【讨论】:

但这并不能解决问题。如果您阅读过其他 cmets,您会看到他在 Vscode 中使用 php Intellephense。该插件会生成错误(即使代码有效),到目前为止它仍然存在相同的问题。

以上是关于Laravel 的尝试()方法未定义(JWT)的主要内容,如果未能解决你的问题,请参考以下文章

Auth 尝试方法在 Laravel/Lumen + JWT + 用户自定义模型中如何工作

JWT Cookie 未正确存储 - Laravel

Laravel 5.4 Tymon JWT Auth Guard 驱动未定义

Laravel Jetstream Livewire 未定义变量

未捕获的引用错误,未定义通知

PHP Laravel 5.7 Tymon/jwt-auth 未安装