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

时间:2016-04-13 03:45:41

标签: php laravel hash laravel-5.2

以下是该方案:

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

这是我的控制器:

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!');
        });
    }

请提出任何可能的建议!

2 个答案:

答案 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了解更多信息