Laravel Dual Auth机制:数据库和REST API

时间:2015-11-02 08:52:51

标签: php rest laravel authentication

我必须在Laravel 5.1.19上设置一个身份验证系统,它将处理两种类型的用户:CMS管理员用户和常规最终用户:

  • CMS管理员凭据将映射到Laravel的数据库中,因此我 可以使用默认的Laravel身份验证机制(Eloquent model& all)

  • 普通用户将存储在不同的数据库中 可直接访问。常客的凭证检查是
    通过REST调用实现可以查询的专用服务器 分贝。

管理员和常客将拥有不同的登录页面。我的问题是:

如何将两个auth机制映射到两个不同的路由?

Say / login / admin是CMS管理员的登录URL。此请求应由默认身份验证处理。 Say / login / users是常客的登录URL。这应由自定义身份验证处理,该身份验证将向其他服务器发出REST请求,以进行凭据检查和检索其他必要的用户信息。

如何实现不在Laravel的数据库中存储任何信息的自定义身份验证机制?

进行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的设置记录在上述帖子中。

希望这对某人有所帮助,如果你们有东西要补充,请这样做。 谢谢!

0 个答案:

没有答案