Laravel Auth复制电子邮件

时间:2015-01-06 10:14:16

标签: php mysql laravel

我使用Laravel Auth允许人们登录。

现在我有一个数据库,人们可以多次存在(对于较新的事件)

因此,我想知道是否可以调整Auth查询以检查最新的电子邮件地址,因此,获取数据库中具有最高ID的电子邮件和密码组合

我似乎无法在Illuminate Structure中的任何地方找到查询..我在这里找错了地方吗?

Class guard {

似乎具有记录人员的功能。 谢谢!

1 个答案:

答案 0 :(得分:1)

您可以通过覆盖Auth驱动程序。

要创建自定义驱动程序:  1.创建一个实现UserProviderInterface的新类  2.在app/start/global.php中注册您的auth驱动程序,添加以下内容:

Auth::extend('auth.mydriver', function($app)
{
    return new MyApp\Extensions\MyAuthDriver;
});
  1. 告诉配置在app/config/auth.php中查找您的驱动程序并更改'driver' => 'auth.mydriver',
  2. 现在Laravel使用您的Auth实现。开始时我会复制原始代码并更改您想要提供自定义实现的方法

    编辑:

    如果您查看尝试工作的方式,如果正常验证失败,则会调用retrieveByCredentials。 如果你想要覆盖Guard的方式,你必须创建自己的Guard类并使用而不是默认的类(app/config/app.php

    /**
         * Attempt to authenticate a user using the given credentials.
         *
         * @param  array  $credentials
         * @param  bool   $remember
         * @param  bool   $login
         * @return bool
         */
        public function attempt(array $credentials = array(), $remember = false, $login = true)
        {
            $this->fireAttemptEvent($credentials, $remember, $login);
            $this->lastAttempted = $user = $this->provider->retrieveByCredentials($credentials);
            // If an implementation of UserInterface was returned, we'll ask the provider
            // to validate the user against the given credentials, and if they are in
            // fact valid we'll log the users into the application and return true.
            if ($this->hasValidCredentials($user, $credentials))
            {
                if ($login) $this->login($user, $remember);
                return true;
            }
            return false;
        }