【发布时间】: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();
-
问题解决了吗?