Laravel:如何在Laravel应用程序中使用哈希密码登录


Laravel: How to login with Hash password in laravel applicaiton

以下是场景:

我制作了一个随机散列密码,并将其发送到用户邮件中,其中包含登录详细信息(例如邮件)。用户收到了邮件,但他无法使用该哈希密码登录网站。我该如何解决此问题?

这是我的控制器:

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即可使用。您可以查看他们的官方文档以了解更多信息