laravel 5.3登录验证失败的问题

问题描述 投票:0回答:1

我使用以下代码加密laravel 5.3中的电子邮件。我已将此加密的电子邮件值存储在数据库中。

use Encryptable;

protected $encryptable = [
     'firstname', 'lastname','email','phone'

];

当我登录时,我使用以下代码加密我在登录表单中输入的电子邮件。每次加密都给出不同的值,因此当我将此值与数据库值进行比较时,比较失败并且无法登录。请告诉我这里我缺少的东西。

if (Auth::attempt(['email' => Crypt::encrypt(Input::get('email')), 'password' => Input::get('password') ])) {

    // Authentication passed...
    return redirect()->intended('dashboard');
} 
else{        

    return redirect()->back()
        ->withInput()
        ->withErrors([
            $this->username() => Lang::get('auth.failed'),
        ]);

}
laravel-5.3
1个回答
0
投票

编辑:您的示例不起作用的原因是因为如果您运行Crypt::encrypt(Input::get('email'))两次,您将得到两个不能比较的不同可解密字符串。

为了补充我的评论,您必须在用户对象上保存电子邮件哈希值和加密电子邮件值,然后您将能够使用哈希值查找/登录用户,并在您的软件需要时解密电子邮件地址(即显示在帐户页面,忘记密码电子邮件等)

因此,您将encrypted_emailemail将电子邮件视为哈希

$emailHash= Hash::make(Input::get('email'));
$password = Input::get('password');
Auth::attempt(['email'=> $emailHash, 'password' => $password]);

如果您想显示或使用电子邮件地址,您将解密用户对象上的encrypted_email字段。

$email = decrypt($user->encryptedEmail);
© www.soinside.com 2019 - 2024. All rights reserved.