我已在CRM中创建了帐户并在其中输入了密码。
$account->password = bcrypt($password);
然后在我的网站上我创建了一些警卫和提供者:
'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
]
],
然后尝试使用后卫业务登录帐户:
public function login(BusinessLoginRequest $request)
{
$orgNumber = $request->input('orgNumber');
$password = $request->input('password');
if(Auth::guard('business')->attempt(['orgNumber' => $orgNumber, 'password' => $password ])) {
var_dump(\auth('business')->user());
}
}
我的模型看起来像:
class BusinessAccounts extends Model implements Authenticatable
{
use \Illuminate\Auth\Authenticatable;
protected $table = 'business_accounts';
protected $fillable =
[
'orgNumber', 'password'
];
public $timestamps = false;
}
但是当我尝试登录并且var_dump用户使用密码时,我有空白屏幕,当我试图从我的数据库中输入哈希密码时,我可以看到商业帐户模型。 我的代码出了什么问题? 我怎么能理解thad Auth :: atempt只是用db-password检查登录密码的值,当然,不一样。 我读过很多指南和文章但却找不到错误, 我知道这很简单,但我不明白。
答案 0 :(得分:0)
使用bcrypt
功能时,您无需使用attempt
。由于您已经在数据库中存储了散列密码,因此您需要比较attempt
函数完成的密码。
所以只需删除bcrypt
并按原样传递
$account->password = $password;
来自docs
如果找到用户,则存储在数据库中的散列密码将会出现 与通过该方法传递给该方法的密码值进行比较 阵列。您不应该将指定为密码的密码哈希 值,因为框架会自动哈希值之前 将它与数据库中的哈希密码进行比较。