如何:间接查找用户的Laravel Auth用户提供程序

时间:2017-05-19 07:13:43

标签: laravel authentication

我的Laravel项目涉及企业及其员工。主要的Eloquent模型是企业,用户和角色。用户可以拥有多个角色,每个角色都有不同的业务。

在身份验证方面,Laravel Auth设置非常适合,但有一个例外:用户没有电子邮件地址。相反,他们的每个角色都有一个电子邮件地址,用户可以使用其中任何一个登录。

我的用户对象包含passwordremember_token字段。在我看来,这个对象仍然应该实现Illuminate\Contracts\Auth\Authenticatable接口,并且它应该通过导入Illuminate\Auth\Authenticatable特征来实现。听起来不错吗?

谈到Illuminate\Contracts\Auth\UserProvider界面:

  • 我认为我可以扩展Eloquent提供程序实现Illuminate\Auth\EloquentUserProvider,并仅覆盖retrieveByCredentials()方法,但我不确定。我还需要覆盖其他方法吗?
  • 如果我确实扩展了Eloquent提供程序实现,那么当我在$hasher方法$model中注册新用户提供程序时,如何注入boot()AuthServiceProvider参数1}}。这些值来自何处(见下文)?
public function boot()
{
    $this->registerPolicies(); 
    Auth::provider('role', function ($app) {
        $hasher = ''; // ????
        $model = ''; // ???
        return new UserViaRoleProvider($hasher, $model);
    });
}

1 个答案:

答案 0 :(得分:0)

经过一些实验,我发现创建自己的UserProvider接口实现更容易。需要进行一些思考的唯一方法是retrieveByCredentials()。它搜索角色,然后返回相关用户。

虽然我成功登录,但我最终放弃了这种方法,因为Auth系统的其他部分假设用户和电子邮件之间存在一对一的关系。例如,密码重置功能。<​​/ p>