如何将原始用户密码发送到他的邮件(在加密之前)

时间:2018-04-16 08:33:54

标签: laravel model eloquent bcrypt observers

在我的系统中,用户无法注册。管理员在管理面板中添加所有用户并告诉他们您的密码是" xxx"。现在我需要向用户发送邮件。其中包含用户电子邮件和用户密码。系统工作得很好。但有一个例外。在邮件中,密码是加密的。我怎么解决?我不知道任何线索。我正在使用观察员。在模型中:

    public static function boot()
{
    parent::boot();
    self::created(function () {
        $customer = Customer::latest()->get()->first();
        Mail::send('emails.user_login_informations', ['customer' => $customer], function($message) use($customer) {
            $message->to($customer->email, $customer->name, $customer->password)
                ->subject('Login Information');
        });
    });
}

ps:这是有效的。在我的邮件中:

Your email: xxx@example.com 
Your Password: $2y$10$/GW5XNH9KGU.Nz05PZHFJuKb2ldhwYhS8oMX9e7HJIuFNJ

但这看起来像:

Your email: xxx@example.com 
Your Password: 123

2 个答案:

答案 0 :(得分:2)

您可以创建临时密码字段,并在用户激活时将其删除。我需要这个用于现实世界的例子。例如:

Event::listen('rainlab.user.activate', function($user) {
    $user->temp_password = null;
    $user->save();
});

User::saving(function ($user) {
    $password = post('User.password');
    if ($password && ! $user->attributes['is_activated']) {
        $user->temp_password = $password;
    }
});

如上所述,这包括很大的安全风险。

答案 1 :(得分:1)

您哈希用户密码以提高安全性。哈希功能是一种单向散列,因此无法逆转。

更好的方法是创建密码重置令牌并将其发送给用户。因此,用户可以使用电子邮件地址/令牌组合设置新密码。要增加此方法,您可以在30分钟左右后让令牌过期。