【问题标题】:Laravel Passport: Use custom passwordLaravel Passport:使用自定义密码
【发布时间】:2018-05-08 01:18:46
【问题描述】:

我想使用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

[堆栈跟踪的第一行...]

  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());
}

按照this answer 的建议,我尝试覆盖User.php 模型中的validateForPassportPasswordGrant($password),但没有帮助:

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

我应该如何在我的数据库中有user_password 而不是password

感谢您的帮助。

【问题讨论】:

    标签: php laravel laravel-passport


    【解决方案1】:

    这个问题实际上并不是 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。你会覆盖它。

    顺便说一下,授予类型上下文中的“密码”一词是完全不同的东西,而不是您应该像那样更改的东西。这更多地与配置参考有关,而不是数据库字段。

    【讨论】:

    • 感谢您的回答,抱歉耽搁了。不幸的是,它返回了同样的错误:Undefined index: password.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-24
    • 2017-02-28
    • 2015-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-17
    相关资源
    最近更新 更多