我必须在Laravel 5.1.19上设置一个身份验证系统,它将处理两种类型的用户:CMS管理员用户和常规最终用户:
CMS管理员凭据将映射到Laravel的数据库中,因此我 可以使用默认的Laravel身份验证机制(Eloquent model& all)
普通用户将存储在不同的数据库中
可直接访问。常客的凭证检查是
通过REST调用实现可以查询的专用服务器
分贝。
管理员和常客将拥有不同的登录页面。我的问题是:
Say / login / admin是CMS管理员的登录URL。此请求应由默认身份验证处理。 Say / login / users是常客的登录URL。这应由自定义身份验证处理,该身份验证将向其他服务器发出REST请求,以进行凭据检查和检索其他必要的用户信息。
进行REST调用应该很容易。我的问题是所有auth教程都假定用户将被映射到db表中,而我的要求使得无法这样做。我在laravel.io上看了一篇文章,其中有人说他试图在Session中保存User对象,但他没有详细介绍。
关注this laravel.io post我设法创建了一个自定义UserProvider
类,它扩展了Illuminate\Auth\EloquentUserProvider
覆盖retrieveById($identifier)
方法,以便它首先尝试从中检索用户对象Session
。如果找不到任何内容,则会将操作委托给其父级EloquentUserProvider
:
class CustomUserProvider extends EloquentUserProvider {
public function __construct(HasherContract $hasher, $model)
{
parent::__construct($hasher, $model);
}
public function retrieveById($identifier)
{
$user = getSessionUser($identifier);
if ($user) {
return $user;
} else {
return parent::retrieveById($identifier);
}
}
...
除此之外,我只是将当前用户存储在Session
的{{1}}中。
自定义LoginController
的设置记录在上述帖子中。
希望这对某人有所帮助,如果你们有东西要补充,请这样做。 谢谢!