以下是场景:
我制作了一个随机散列密码,并将其发送到用户邮件中,其中包含登录详细信息(例如邮件)。用户收到了邮件,但他无法使用该哈希密码登录网站。我该如何解决此问题?
这是我的控制器:
public function sendEmail(Request $request, $id)
{
$user = User::findOrFail($id);
$user->password=Hash::make(str_random(4));
$user->update($request->all( ));
Mail::send('mail', ['user' => $user], function ($m) use ($user) {
$m->from('xxxxxx.com', 'xxx');
$m->to($user->email, $user->name)->subject('Thanks!');
});
}
请提出任何可能的建议!
您可以在散列之前将密码存储到变量中,并将其发送给最终用户。
public function sendEmail(Request $request, $id)
{
$user = User::findOrFail($id);
$user->passwordToBeSend = str_random(4);
$user->password = Hash::make($newPassword);
$user->update($request->all( ));
Mail::send('mail', ['user' => $user], function ($m) use ($user) {
$m->from('xxxxxx.com', 'xxx');
$m->to($user->email, $user->name)->subject('Thanks!');
});
}
请确保将新密码($newPassword)发送到邮件发送块。或者只将$user分配为新对象,如'$user->passwordTomail=$newPassword;'
您需要编写自己的登录函数,而不是使用提供的laravel。基本上只需从数据库中提取用户并直接进行比较,而无需另一个散列
function login($id, $password) {
$user = User::where('id',$id)->where('password',$password)->first();
if($user){
Auth::login($user);
}
}
然而,这不是一个好的做法,因为laravel已经提供了内置的密码重置功能,您只需键入php artisan make:auth
即可使用。您可以查看他们的官方文档以了解更多信息