使用用户名而不是电子邮件进行 JWTAuth 身份验证

Jam*_*mad 6 php authentication api laravel

有什么方法可以在 laravel jwt-auth中使用用户名(或任何自定义列)而不是电子邮件进行身份验证?

这是现有的代码

public function authenticate(Request $request)
{
    $credentials = $request->only('email', 'password');

    try {
        // verify the credentials and create a token for the user
        if (! $token = JWTAuth::attempt($credentials)) {
            return response()->json(['error' => 'invalid_credentials'], 401);
        }
    } catch (JWTException $e) {
        // something went wrong
        return response()->json(['error' => 'could_not_create_token'], 500);
    }

    // if no errors are encountered we can return a JWT
    return response()->json(compact('token'));
}
Run Code Online (Sandbox Code Playgroud)

我想做这样的事情

$credentials = $request->only('username', 'password');
Run Code Online (Sandbox Code Playgroud)

一种方法是将用户名放在电子邮件列中,但这是一个糟糕的解决方案。

Jam*_*mad 4

我在这里找到了方法

我们可以从模型中获取用户(基于自定义字段),例如

// 抓取一些用户

$user = User::first();
Run Code Online (Sandbox Code Playgroud)

并手动对其进行验证。

$token = JWTAuth::fromUser($user);
Run Code Online (Sandbox Code Playgroud)