以下是该方案:
我已经制作了一个随机哈希密码,并将其发送到用户邮件,并附上登录详细信息(例如邮件)。用户收到了邮件,但他无法使用该哈希密码登录网站。我该如何解决这个问题?
这是我的控制器:
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!');
});
}
请提出任何可能的建议!
答案 0 :(得分:0)
您可以在散列之前将密码存储到变量并将其发送给最终用户。
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;'
答案 1 :(得分:0)
您需要编写自己的登录功能,而不是使用提供的一个laravel。基本上只是从数据库中获取用户并直接比较它而不需要另外的散列
function login($id, $password) {
$user = User::where('id',$id)->where('password',$password)->first();
if($user){
Auth::login($user);
}
}
但是,这不是一个好习惯,因为laravel已经提供了内置密码重置功能,您只需键入php artisan make:auth
即可使用。您可以查看他们的official document了解更多信息