【问题标题】:Laravel: How to set my custom password broker to be used by Password::sendResetLink?Laravel:如何设置我的自定义密码代理以供 Password::sendResetLink 使用?
【发布时间】:2021-05-26 00:08:08
【问题描述】:

Laravel 的documentation 说:

您可能想知道 Laravel 在调用 Password 门面的 sendResetLink 方法时如何知道如何从应用程序的数据库中检索用户记录。 Laravel 密码代理利用您的身份验证系统的“用户提供者”来检索数据库记录。密码代理使用的用户提供程序在 config/auth.php 配置文件的密码配置数组中配置。要了解有关编写自定义用户提供程序的更多信息,请参阅身份验证文档

但是如何在我的自定义包packages/custom-packages/foo/src/routes/api.php 中设置我的自定义密码代理users:foo 以供Password::sendResetLink 使用?

Route::post('forgot-password', function (Request $request) {
    $request->validate(['email' => 'required|email|exists:foo.users,email']);
    $status = Password::sendResetLink(
        $request->only('email')
    );
    return $status === Password::RESET_LINK_SENT
        ? response()->json(['status' => __($status)])
        : response()->json(['email' => __($status)]);
});

下面是我的config/auth.php

...
'passwords' => [
    'users' => [
        'provider' => 'users',
        'table' => 'password_resets',
        'expire' => 60,
        'throttle' => 60,
    ],
    'users:foo' => [
        'provider' => 'users:foo',
        'table' => 'foo.password_resets',
        'expire' => 60,
        'throttle' => 60,
    ]
]

【问题讨论】:

    标签: laravel laravel-8


    【解决方案1】:

    通过外观设置您的代理。

    use Illuminate\Support\Facades\Password;
    
    $broker = 'users:foo'; // the default value is 'users' from 'auth.defaults.passwords'.
    
    Password::broker($broker); // sets the given broker
    

    它将从 "auth.passwords.{$name}" 获取配置,其中 $name 是 $broker。

    如果代理的配置未定义,则抛出异常:“密码重置器 [{$name}] 未定义。”。好的方式是使用您的配置创建一个新的密码代理。

    【讨论】:

      猜你喜欢
      • 2017-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-17
      • 1970-01-01
      • 2015-04-13
      • 1970-01-01
      相关资源
      最近更新 更多