Laravel 护照:使用自定义密码

Laravel Passport: Use custom password

我想使用 user_password 而不是 password 作为我的 API 数据库的密码列的名称。所以这是 login() 方法的代码,用于在我的 PassportController:

中检索令牌
public function login() {
    if (Auth::attempt(['user_login' => request('login'), 'password' => request('user_password')])) {
        $user = Auth::user();
        $success['token'] = $user->createToken('ToutelaBreizh')->accessToken;
        return response()->json(['success' => $success], $this->successStatus);
    } else {
        return response()->json(['error' => 'Unauthorised.'], 401);
    }
}

向本控制器请求的参数为loginpassword

问题是当我转到与此控制器关联的路由时,比方说 POST /api/login。我收到此错误:

ErrorException: Undefined index: password in file ... EloquentUserProvider.php on line 133

[First lines of the stack trace...]

  1. ... PassportController.php:21

我的 PassportController 中的第 21 行是我在上面发布的登录功能的第二行,实际上,password 字段在我写的凭据中没有被告知:我写了 user_password 而不是password,但字符串 password 硬编码在 EloquentUserProvider.php,第 133 行:

public function validateCredentials(UserContract $user, array $credentials)
{
    $plain = $credentials['password'];

    return $this->hasher->check($plain, $user->getAuthPassword());
}

根据 的建议,我试图覆盖 User.php 模型中的 validateForPassportPasswordGrant($password) 但它没有帮助:

public function validateForPassportPasswordGrant($password)
{
    return Hash::check($password, $this->user_password);
}

我应该怎么做才能让我的数据库中有 user_password 而不是 password

感谢您的帮助。

这个问题实际上并不是 Passport 特有的,它更多地与从 Passport 抽象出来的 Auth Guard 行为有关。只需将其添加到您的用户模型中:

/**
 * Get the password for the user.
 *
 * @return string
 */
public function getAuthPassword()
{
    return $this->user_password;
}

Laravel 的开箱即用 App\User 模型扩展了 Illuminate\Foundation\Auth\User,它使用 Illuminate\Auth\Authenticatable 特征。该特性只是为了满足 Illuminate\Contracts\Auth\Authenticatable 接口的条件而提供的便利,其中之一是基本上为您的密码字段命名的任何内容提供 getter 。你会覆盖这个。

'password' 这个词在授权类型的上下文中是一个完全不同的东西,而不是你应该那样改变的东西。这更多地与配置参考有关,而不是数据库字段。