Laravel auth :: atempt只获得哈希密码

时间:2017-12-06 08:42:36

标签: php laravel laravel-5

我已在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检查登录密码的值,当然,不一样。 我读过很多指南和文章但却找不到错误, 我知道这很简单,但我不明白。

1 个答案:

答案 0 :(得分:0)

使用bcrypt功能时,您无需使用attempt。由于您已经在数据库中存储了散列密码,因此您需要比较attempt函数完成的密码。

所以只需删除bcrypt并按原样传递

$account->password = $password;

来自docs

  

如果找到用户,则存储在数据库中的散列密码将会出现   与通过该方法传递给该方法的密码值进行比较   阵列。您不应该将指定为密码的密码哈希   值,因为框架会自动哈希值之前   将它与数据库中的哈希密码进行比较。