【问题标题】:Hashed password in DB and plain password with Hash::check are not equal数据库中的散列密码和带有 Hash::check 的普通密码不相等
【发布时间】:2018-05-21 18:14:58
【问题描述】:

我已经在 CRM 中创建了我的帐户。

最有趣的是密码,我是这样处理的:

$password = $faker->password();
$businessAccount->password = bcrypt($password);

然后我用这个密码发送电子邮件。

当我想使用一些数字和密码登录时,我已经在我的网站中创建了登录页面。

public function login(BusinessLoginRequest $request)
    {
        $orgNumber = $request->input('orgNumber');
        $password = $request->input('password');
        var_dump( $pass = BusinessAccounts::find('123456789')->password);
        var_dump(Hash::check($password, $pass));
        if(Auth::guard('business')->attempt(['orgNumber' => $orgNumber, 'password' => $password ])) {
                return 'Hello';
        }
        return 'no';

    }

我很抱歉那个 var_dumps,我把它插在这里看看当我点击“登录”时会发生什么

密码是通过 bcrypt 进行散列的,我的理解是,Auth::attempt 使用散列检查纯密码。

好的,让我们更深入一点。首先 var_dump 说我存储在数据库中的密码,它们是相等的。

第二个 var_dump 说我“bool(false)”,最后说我不,我认为身份验证失败。

但是当我在表单中输入哈希密码时,一切都很好,我看到“Hello”,但这是错误的。

当然,我还创建了守卫和提供者:

'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
        'api' => [
            'driver' => 'token',
            'provider' => 'users',
        ],
        'business' => [
            'driver' => 'session',
            'provider' => 'business'
        ]
    ],

    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\Models\Eloquent\Account::class,
        ],
        'business' => [
            'driver' => 'eloquent',
            'model'  => App\Models\Eloquent\BusinessAccounts::class
        ]
    ],

并更改了我的模型:

class BusinessAccounts extends Model implements Authenticatable
{
    use \Illuminate\Auth\Authenticatable;

    protected $table = 'business_accounts';

    protected $fillable =
        [
            'orgNumber', 'password'
        ];

    public $timestamps = false;

    protected $primaryKey = 'orgNumber';

}

问题是:我做错了什么?如何检查未散列的密码?我不想从我的数据库中输入哈希密码。

【问题讨论】:

  • 你使用的是哪个版本的 laravel?
  • 在你的第一个 var_dump() 中,你的意思是真的$pass = BusinessAccounts::find('123456789')->password(变量赋值)还是你真正想要$pass, BusinessAccounts::find('123456789')->password(显示两个哈希值)?
  • 您确定要更新您的 $businessAccount 实例吗?即 $businessAccount->password = bcrypt($password);$businessAccount->save();
  • 问题解决了吗?

标签: php laravel hash


【解决方案1】:

尝试以这种方式散列:

use Illuminate\Support\Facades\Hash;

然后:

'password' => Hash::make($request->newPassword)

【讨论】:

    猜你喜欢
    • 2019-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-21
    • 2011-04-28
    • 1970-01-01
    • 1970-01-01
    • 2018-01-05
    相关资源
    最近更新 更多