我的Laravel项目涉及企业及其员工。主要的Eloquent模型是企业,用户和角色。用户可以拥有多个角色,每个角色都有不同的业务。
在身份验证方面,Laravel Auth设置非常适合,但有一个例外:用户没有电子邮件地址。相反,他们的每个角色都有一个电子邮件地址,用户可以使用其中任何一个登录。
我的用户对象包含password
和remember_token
字段。在我看来,这个对象仍然应该实现Illuminate\Contracts\Auth\Authenticatable
接口,并且它应该通过导入Illuminate\Auth\Authenticatable
特征来实现。听起来不错吗?
谈到Illuminate\Contracts\Auth\UserProvider
界面:
Illuminate\Auth\EloquentUserProvider
,并仅覆盖retrieveByCredentials()
方法,但我不确定。我还需要覆盖其他方法吗?$hasher
方法$model
中注册新用户提供程序时,如何注入boot()
和AuthServiceProvider
参数1}}。这些值来自何处(见下文)?public function boot() { $this->registerPolicies(); Auth::provider('role', function ($app) { $hasher = ''; // ???? $model = ''; // ??? return new UserViaRoleProvider($hasher, $model); }); }
答案 0 :(得分:0)
经过一些实验,我发现创建自己的UserProvider接口实现更容易。需要进行一些思考的唯一方法是retrieveByCredentials()
。它搜索角色,然后返回相关用户。
虽然我成功登录,但我最终放弃了这种方法,因为Auth系统的其他部分假设用户和电子邮件之间存在一对一的关系。例如,密码重置功能。</ p>