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

Posted

技术标签:

【中文标题】如何在 Lumen 6x 中实现默认 Laravel 重置密码【英文标题】:How to Implement Default Laravel Reset Password in Lumen 6x 【发布时间】:2020-03-11 01:50:02 【问题描述】:

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

遇到错误 "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);
    

它使用这个类use Illuminate\Support\Facades\Password;

我认为错误是由这种方法引发的

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

我看到这个getFacadeAccesor返回字符串注册在namespace Illuminate\Foundation;

但我在我的 Lumen 供应商文件夹中找不到此文件。有什么解决方法吗?谢谢!

【问题讨论】:

请复制粘贴代码,不要上传图片 已编辑。 @albus_severus 【参考方案1】:

您可以尝试在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 的方向前进。

【讨论】:

谢谢!我从 laravel 安装了照明包

以上是关于如何在 Lumen 6x 中实现默认 Laravel 重置密码的主要内容,如果未能解决你的问题,请参考以下文章

如何在带警卫的流明中实现多重身份验证?

在 Laravel 5 (Lumen) 中使用基本路径

如何在 iOS 中实现类似于 Android 手机(默认)的裁剪功能?

流明自定义验证

使用具有自动调整大小的默认整数数组在java中实现堆栈

如何在 Parse-Server 中实现“protectedFields”?