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 会导致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.

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于Laravel:如何从自定义 UserProvider 返回更多数据?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 4.2 视图:从自定义位置发布

Laravel:从自定义中间件油门组返回 bool

laravel 在使用 php artisan 时从自定义存根创建模型

如何从自定义 maven mojo 创建 maven 配置文件

如何从自定义函数中调用委托函数?

如何从自定义列表视图中获取选定项目并在 toast 消息中打印?