以下方法在laravel5.6测试成功
一、背景
如果你在使用Laravel的话,用户验证的代码只需要一行代码就可以搞定
if (auth('admin')->attempt(['email' => $email, 'password' => $password, 'active' => 1])) {
// 验证成功的逻辑
}
但是,如果你想切换为自定义的加密验证方式,那么这篇文章可能会给你一些思路
二、实现方法
1. 编写自己的hasher
<?php
namespace App\Libs;
use Illuminate\Contracts\Hashing\Hasher;
class NoHasher implements Hasher
{
/**
* Get information about the given hashed value.
*
* @param string $hashedValue
* @return array
*/
public function info($hashedValue)
{
return [];
}
public function check($value, $hashedValue, array $options = [])
{
return $this->make($value) === $hashedValue;
}
public function needsRehash($hashedValue, array $options = [])
{
return false;
}
public function make($value, array $options = [])
{
// $value = env('SALT', '') . $value;
return $value; //这里写你自定义的加密方法,这里没有加密
}
}
2. 用自己的Hasher替换默认的Hasher
创建NoHashServiceProvider
php artisan make:provider NoHashServiceProvider
添加如下方法
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use App\Libs\NoHasher;
class NoHashServiceProvider extends ServiceProvider
{
/**
* Bootstrap services.
*
* @return void
*/
public function boot()
{
$this->app->singleton('hash', function () {
return new NoHasher;
});
}
/**
* Register services.
*
* @return void
*/
public function register()
{
//
}
public function provides()
{
return ['hash'];
}
}
3. 在config/app.php的providers中,将
Illuminate\Hashing\HashServiceProvider::class,
替换为
App\Providers\NoHashServiceProvider::class,
OK,大功告成