【问题标题】:Laravel Passport custom validation for any /oauth/token request任何 /oauth/token 请求的 Laravel Passport 自定义验证
【发布时间】:2019-06-18 04:34:02
【问题描述】:

在创建请求的令牌之前,我需要验证 users 表中的额外字段,但我找不到使用 Passport 的简单方法。

我找到了类似的 workarunds,它使用 $user->createToken() 返回一个令牌,但我找不到涵盖所有默认 /oauth/token 选项的人,例如 refresh_token

我还看到Passport 有一些简单的方法来自定义用户名列和密码验证,但我认为这不能满足我的需要。

更新

我不确定这是否是最好的解决方案,但在 Laravel 5.8 中,passport 包有这个 validateForPassportPasswordGrant() 函数,它允许您在完成身份验证过程之前添加一些额外的条件。

class User extends Authenticatable
{

    public function validateForPassportPasswordGrant($password)
    {
        if ($this->active != true) {
            throw OAuthServerException::accessDenied('The account is not active');
        }

        return Hash::check($password, $this->password);
    }
}

【问题讨论】:

  • 您是否设法验证了用户的自定义字段?我也有同样的问题,无法验证我在 users 表上的新 active 列是真还是假。
  • 是的,在这种情况下,active 是users 表中的一列。你用的是护照吧?
  • 是的,伙计,它与您的代码完美配合。现在我正在尝试管理响应,我不想收到 401。谢谢
  • 嗯,你可以简单地设置一个return response('', 400);(或无论http代码),但我通常会尽量避免直接从models返回一些东西

标签: laravel oauth-2.0 laravel-passport


【解决方案1】:

在您的登录方法中

if (Auth::attempt(['email' => $request->email, 'password' => $request->password, 'is_active' => 1, 'username' => $request->username])) {
   // create a token here
}

【讨论】:

  • 是的,这是验证额外字段的方法,但如何从此时开始在自定义控制器中运行令牌生成器并获取:access_token、refresh_token、expires_in?跨度>
猜你喜欢
  • 2021-06-21
  • 2017-05-30
  • 2021-08-15
  • 2017-11-17
  • 1970-01-01
  • 2019-10-07
  • 1970-01-01
  • 2020-12-10
  • 2016-06-15
相关资源
最近更新 更多