【问题标题】:Laravel: How can I return more data from a custom UserProvider?Laravel:如何从自定义 UserProvider 返回更多数据?
【发布时间】:2021-06-22 06:29:17
【问题描述】:

我已成功创建custom user provider 并实现了用户界面。

我正在尝试将用户对象保存到从第三方后端返回的本地 Postgres 数据库中。

这是我的retrieveByCredentials 方法的样子:

// MyCustomUserProvider.php

public function retrieveByCredentials(array $credentials) {
    if (empty($credentials)) {
        return null;
    }


    try {
        $response = Http::asForm()
            ->retry(3, 100)
            ->timeout(5)
            ->post('https://my-custom-auth-endpoint', $credentials)
            ->json();

            if ($response) {
                $user = User::firstOrNew([
                    'foo' => $response['foo'],
                ]);

                $user->save();

                return $user;
            }
    } catch (RequestException $e) {
        Log::info('-----------------------------------------------------------');
        Log::info(print_r($e->getMessage(), true));
        Log::info('-----------------------------------------------------------');

        return $e->getMessage();
    }
}

...

public function validateCredentials(Authenticatable $user, array $credentials): bool {
        return strtoupper($user->foo) === strtoupper($credentials['foo']);
}

到目前为止,一切都运行良好。我正在为每个必需的方法获取正确的值/布尔值。但是,我需要能够向我的控制器返回额外的信息,而不仅仅是一个布尔值。例如,如果用户的密码已过期,则此信息来自我的第 3 方数据库。到目前为止,在我的LoginController 中返回user 会导致truefalse 响应。如果我从我的CustomProvider 收到false,我可以设置一条“无效凭据”的消息。但这可能并不总是正确的错误。

我是这样称呼CustomUserProvider的:

// LoginController.php

$authenticated = Auth::guard('foo')
    ->attempt([
        'userid' => $request->username,
        'password' => $request->password,
    ]);


// $authenticated is the response from CustomUserProvider.
dd($authenticated) // true or false.

据了解,在我的提供程序中,我只想对用户进行身份验证。如何将经过身份验证的用户返回给控制器?此外,如何将错误返回给控制器,以便显示正确的错误消息?

【问题讨论】:

    标签: laravel laravel-8


    【解决方案1】:

    函数Auth::guard('foo')->attempt([]) 也会返回一个布尔值来告诉用户认证是否成功。如果你想获取 auth 用户,只需在调用该函数后返回Auth::user(),如return response()->json(Auth::user())

    【讨论】:

      猜你喜欢
      • 2021-10-28
      • 2021-07-04
      • 1970-01-01
      • 2015-06-08
      • 2015-07-13
      • 2012-09-01
      • 2015-06-02
      • 2020-09-08
      • 2019-03-20
      相关资源
      最近更新 更多