Laravel:如何从自定义 UserProvider 返回更多数据?
Posted
技术标签:
【中文标题】Laravel:如何从自定义 UserProvider 返回更多数据?【英文标题】:Laravel: How can I return more data from a custom 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
会导致true
或false
响应。如果我从我的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.
据了解,在我的提供程序中,我只想对用户进行身份验证。如何将经过身份验证的用户返回给控制器?此外,如何将错误返回给控制器,以便显示正确的错误消息?
【问题讨论】:
【参考方案1】:函数Auth::guard('foo')->attempt([])
也会返回一个布尔值来告诉用户认证是否成功。如果你想获取 auth 用户,只需在调用该函数后返回Auth::user()
,如return response()->json(Auth::user())
【讨论】:
以上是关于Laravel:如何从自定义 UserProvider 返回更多数据?的主要内容,如果未能解决你的问题,请参考以下文章
laravel 在使用 php artisan 时从自定义存根创建模型