接着上一篇来说

  • 自定义用户提供器(目前不就是使用的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,其实我们的Usermodel 就是继承它的,所以我们再User里面定义:

 public function getAuthPassword()
    {
        return $this->attributes[ 'password' ];
    }

接下来就是注册自定义的提供器了,在AuthServeProvider.phpboot方法添加:

  $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,而自定义加密方式只是为了兼容旧版系统而已,后面再写


soledad
888 声望35 粉丝

我们努力的付出想换来的是什么,我只想让自己过得快乐点