接着上一篇来说
- 自定义用户提供器(目前不就是使用的EloquentUserProvider,'我们自定义一个,再重写一下validateCredentials就可以了)
- 重写 $this->hasher
自定义用户提供器
由于我们只有一个方法需要改变,所以,我们其实可以extends
EloquentUserProvider
,定义一个MyEloquentUserProvider
,上代码:
namespace App\Auth;
use Illuminate\Auth\EloquentUserProvider;
use Illuminate\Contracts\Auth\Authenticatable as UserContract;
class LrssEloquentUserProvider extends EloquentUserProvider
{
public function validateCredentials( UserContract $user, array $credentials )
{
$plain = $credentials[ 'password' ];
//这个要在实现Authenticatable 的具体类里面定义这个方法,比如User或者Admin
$authPassword = $user->getAuthPassword();
return LrssPassword::validate($plain, $authPassword);
}
}
上面我们可以看到,我们还要在Illuminate\Contracts\Auth\Authenticatable
的具体实现类里面顶一个$user->getAuthPassword()
返回数据库中的密码,然后与用户提交过来的密码进行比对,那么这个contract
的具体实现类是什么呢:
,就是Illuminate\Foundation\Auth\User
,其实我们的User
model 就是继承它的,所以我们再User
里面定义:
public function getAuthPassword()
{
return $this->attributes[ 'password' ];
}
接下来就是注册自定义的提供器了,在AuthServeProvider.php
的boot
方法添加:
$this->app[ 'auth' ]->provider(
'my-eloquent', function( $app, $config ) {
return new MyEloquentUserProvider($this->app[ 'hash' ], $config[ 'model' ]);
}
);
最后一步,修改auth.php
里面的配置项:
'providers' => [
'users' => [
'driver' => 'my-eloquent',
'model' => App\User::class,
]
]
完成
至于第二种就更简单了,可以参考
http://blog.iwanli.me/article...,这篇文章写的很好,我采用一种就行了,接下来就是要集成passport
,而自定义加密方式只是为了兼容旧版系统而已,后面再写
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。