如何在 Lumen 6x 中实现默认 Laravel 重置密码

How to Implement Default Laravel Reset Password in Lumen 6x

我是 Laravel / Lumen 框架的新手,我正在尝试将 Laravel https://laravel.com/docs/5.7/passwords 的默认重置密码特征复制到我的 Lumen 项目中。但是,当我 post 提交电子邮件端点时,我偶然发现了这个错误。

遇到错误 {"message":"Target class [auth.password] does not exist."}

我的路线 $router->post('password/email', 'AuthController@postEmail');

方法

    public function postEmail(Request $request)
    {
        return $this->sendResetLinkEmail($request);
    }
    /**
     * Send a reset link to the given user.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function sendResetLinkEmail(Request $request)
    {
        // We will send the password reset link to this user. Once we have attempted
        // to send the link, we will examine the response then see the message we
        // need to show to the user. Finally, we'll send out a proper response.
        // dd($request->all());
        $response = $this->broker()->sendResetLink(
            $request->only('email')
        );

        return $response == Password::RESET_LINK_SENT
                        ? response()->json(true)
                        : response()->json(false);
    }

并使用此 class 使用 Illuminate\Support\Facades\Password;

而且我认为此方法引发了错误

protected static function getFacadeAccessor()
    {
        return 'auth.password';
    }
}

我看到这个 getFacadeAccessor return 字符串注册在 命名空间 Illuminate\Foundation;

但我在我的 Lumen vendor 文件夹中找不到这个文件。有什么解决方法吗?谢谢!

您可以尝试在 bootstrap/app.php 中注册 Illuminate\Auth\Passwords\PasswordResetServiceProvider 服务提供商:

...
// $app->register(App\Providers\EventServiceProvider::class);
$app->register(Illuminate\Auth\Passwords\PasswordResetServiceProvider::class);

此服务提供商为 auth.password 添加绑定:

protected function registerPasswordBroker()
{
    $this->app->singleton('auth.password', function ($app) {
        return new PasswordBrokerManager($app);
    });

    $this->app->bind('auth.password.broker', function ($app) {
        return $app->make('auth.password')->broker();
    });
}

这只是解决了 auth.password 绑定问题,您还有其他问题需要处理。

您的用户将需要使用 Illuminate\Auth\Passwords\CanResetPassword 特性,但也需要使用 Illuminate\Notifications\Notifiable 特性,因为未安装 Illuminate 软件包,您将不会拥有这些特性。

您不必使用密码代理的 sendResetLink,它在用户上使用 notify 方法(来自 Notifiable),并构建这部分功能至少你自己。

不幸的是,如果您开始需要 Lumen 未附带的 Laravel 框架(Illuminate 包)的片段,您将朝着使用 Laravel 框架而不是 Lumen 的方向前进,经常。