【问题标题】:Trying to reset Passwords in Lumen尝试在 Lumen 中重置密码
【发布时间】:2016-09-17 04:58:04
【问题描述】:

我正在尝试在 Lumen 中实现密码重置功能,但未能成功。

Lumen 可以访问 Laravel 的 PasswordBrokerPasswordManager 之类的东西,但我无法使用它并成功。有什么解决办法吗?

【问题讨论】:

  • 错误说的是什么?如果您希望有人帮助您,请更加详细。

标签: laravel lumen


【解决方案1】:

好的,所以我自己用 Lumen 5.6 完成了这个工作。 (我已经升级到 5.8,仍然可以使用,没有做任何更改)。

这些是我必须对代码进行的更改。我不得不调整一些东西以适应我的系统,但这可能对其他人有所帮助。

路线

我想要两条路线。

  1. 发送重置密码邮件

GET auth/resetpassword?email=fred@example.com

  1. 重置密码

PUT auth/resetpassword?token=281...b&username=fred&password=banana&password_confirmation=banana

作曲家

要向用户发送电子邮件,需要以下 Laravel 包:

composer require illuminate/mail "^5.6"
composer require illuminate/notifications "^5.6"

配置文件

需要一些额外的配置文件:

  • config/auth.php
  • config/mail.php

我只是从 Laravel 5.6 复制了这些,没有做任何更改。我还将邮件变量添加到我的 .env 文件中。

bootstrap/app.php

这些新文件需要在应用中注册:

$app->configure('auth');
$app->configure('mail');

$app->register(Illuminate\Notifications\NotificationServiceProvider::class);
$app->register(\Illuminate\Mail\MailServiceProvider::class);
$app->alias('mailer', \Illuminate\Contracts\Mail\Mailer::class);
$app->withFacades();

数据库

我使用了默认的 Laravel 密码重置表:

Schema::create('password_resets', function (Blueprint $table) {
    $table->string('email')->index();
    $table->string('token');
    $table->timestamp('created_at')->nullable();
});

现在对代码进行真正的更改。

基于 Illuminate\Foundation\Auth\SendsPasswordResetEmailsIlluminate\Foundation\Auth\ResetsPasswords 的代码。

AuthController

use Illuminate\Auth\Passwords\PasswordBrokerManager;
use Illuminate\Support\Facades\Password;
use Laravel\Lumen\Routing\Controller;
use Illuminate\Http\Request;

class AuthController extends Controller
{
    // 1. Send reset password email
    public function generateResetToken(Request $request)
    {
        // Check email address is valid
        $this->validate($request, ['email' => 'required|email']);

        // Send password reset to the user with this email address
        $response = $this->broker()->sendResetLink(
            $request->only('email')
        );

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

    // 2. Reset Password
    public function resetPassword(Request $request)
    {
        // Check input is valid
        $rules = [
            'token'    => 'required',
            'username' => 'required|string',
            'password' => 'required|confirmed|min:6',
        ];
        $this->validate($request, $rules);

        // Reset the password
        $response = $this->broker()->reset(
        $this->credentials($request),
            function ($user, $password) {
                $user->password = app('hash')->make($password);
                $user->save();
            }
        );

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

    /**
     * Get the password reset credentials from the request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    protected function credentials(Request $request)
    {
        return $request->only('username', 'password', 'password_confirmation', 'token');
    }

    /**
     * Get the broker to be used during password reset.
     *
     * @return \Illuminate\Contracts\Auth\PasswordBroker
     */
    public function broker()
    {
        $passwordBrokerManager = new PasswordBrokerManager(app());
        return $passwordBrokerManager->broker();
    }
}

用户模型

use Illuminate\Auth\Passwords\CanResetPassword as CanResetPasswordTrait;
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordInterface;
use Illuminate\Notifications\Notifiable;

class User extends Model implements CanResetPasswordInterface
{
    use CanResetPasswordTrait;
    use Notifiable;

    ...
}

【讨论】:

  • 我使用的是 Lumen 6x。我也安装了 composer require ramsey/uuid 你能分享一下你如何定义 PUT 重置密码的 web.php 吗?谢谢
  • @GAL 希望这有助于$router->put('resetpassword', ['uses' => AuthController::class . '@resetPassword']);
【解决方案2】:

我昨晚真的只是想通了这一点,并写了一篇关于它的博客:

http://www.imjohnbon.com/password-resets-in-lumen/

希望它至少能让你走上正轨。

【讨论】:

  • 此链接缺少很多内容,这不是解决方案。
  • 也非常过时。如果您想为 Lumen 5.6 更新它,请告诉我,我有解决方案。
  • 兄弟,不顾需求,分享解决方案! @zeros-and-ones
猜你喜欢
  • 2017-08-16
  • 1970-01-01
  • 2020-03-11
  • 1970-01-01
  • 2019-09-11
  • 2020-06-07
  • 1970-01-01
  • 1970-01-01
  • 2013-09-21
相关资源
最近更新 更多