当前位置: 首页 > 知识库问答 >
问题:

更新的Laravel 5.2-Auth始终返回false

严朝明
2023-03-14

编辑的

  • Laravel版本:5.2.45
  • PHP版本:5.6
  • 数据库驱动程序

你好

我完成了从laravel 5.1到5.2的更新,并解决了一些问题...

现在我尝试登录,但认证验证密码字段的密码,但在我的数据库密码有另一个名称是senha。

照亮/Auth/EloquentUserProvider.php

/**
     * Retrieve a user by the given credentials.
     *
     * @param  array  $credentials
     * @return \Illuminate\Contracts\Auth\Authenticatable|null
     */
    public function retrieveByCredentials(array $credentials)
    {
        if (empty($credentials)) {
            return;
        }

        // First we will add each credential element to the query as a where clause.
        // Then we can execute the query and, if we found a user, return it in a
        // Eloquent User "model" that will be utilized by the Guard instances.
        $query = $this->createModel()->newQuery();

        foreach ($credentials as $key => $value) {
            **if (! Str::contains($key, 'password'))** {
                $query->where($key, $value);
            }
        }

        return $query->first();
    }

您可以看到,函数试图在凭据中找到字符串密码,而它应该是senha

同样的问题与validateCre的函数文件照亮/Auth/EloquentUserProvider.php

/**
     * Validate a user against the given credentials.
     *
     * @param  \Illuminate\Contracts\Auth\Authenticatable  $user
     * @param  array  $credentials
     * @return bool
     */
    public function validateCredentials(UserContract $user, array $credentials)
    {
        $plain = $credentials['password'];

        return $this->hasher->check($plain, $user->getAuthPassword());
    }

解决这个问题的最好方法是什么?

共有2个答案

沙海
2023-03-14

正如Dayglor所指出的,EloquentUserProvider不会查询密码字段。它希望凭据始终有一个“密码”字段,其他任何字段都是它用来查询数据库的字段。只有在找到用户后,它才会通过执行hash\u检查来检查密码。它使用凭证['password]$user进行哈希检查-

白晋鹏
2023-03-14

最好的办法是。。。

\Auth::attempt( [ 'email' => ' campos@b.com.br ' , 'password' => ' 1234567890 '] );

在他们的模型认证中:

/ **
     * Get the password for the user .
     *
     * @return String
     * /
    getAuthPassword public function ( )
    {
        return $this->senha;
    }
 类似资料:
  • 问题内容: 我在这里看到了几个与sqlite更新有关的问题,但无法解决此问题。我无法更新表,它始终为0; 我可以插入和获取数据,但是更新时只有问题。 PS我也试过execSql() 问题答案: 听起来好像没有什么符合您的标准。也许作为测试,您应该通过null作为where条件(这表示更新所有行),并查看是否仍返回0。 如果此后仍返回0,我将确保您实际上已将数据保存在数据库表中。

  • 在使用ListAdapter时,我注意到在更新一个项之后,DiffUtil。ItemCallback AreContentsSame()方法始终返回true。调试代码时,我意识到旧项和新项完全相同(旧状态消失)。因此,没有调用ListAdapter onBindViewHolder()方法来更新列表中相应的行(只有项目的顺序通过漂亮的动画进行了更改)。 ListAdapter未更新ReyclVie

  • 问题内容: 我以前使用过媒体播放器,但从未遇到过此问题。每当我尝试使用MediaPlayer.create()时,该方法都会使我为null,并且无法播放声音。有什么我想念的吗? 我的sound.mp3在我的原始文件夹中,通过将声音拖到eclipse中的文件夹中,我将其放置在其中。请帮忙,因为我以前玩过声音,所以这真的困扰我:( 问题答案: 如果create() API由于某种原因失败,则返回nul

  • 问题内容: 尽管是有效的类,但以下代码会打印。 文档说方法返回 由 aClassName 命名的类对象,或者如果当前没有加载该名称的类。如果 aClassName 为,则返回。 我也试图获得当前的viewcontroller已加载但仍然得到 可能是什么问题? 更新: 即使尝试这样做,我仍然可以 问题答案: 该函数 确实 适用于(纯和Objective-C派生的)swift类,但是仅当您使用全限定名

  • 问题内容: 我觉得有点愚蠢,但它不起作用: 我有如果给定的用户是unicode。如果字符串中包含或,我想打印成功,但是我总是得到的结果。 问题答案: 隐式锚定到字符串的开头。如果要在字符串中搜索可以在字符串中任何位置的子字符串,则需要使用: 输出: 另外,Python Regexes不需要在开头和结尾都有一个。 最后,我添加到该行的末尾,因为我认为这就是您想要的。否则,您会得到类似的信息,但并不太

  • 我的安全配置似乎不正确。无论我在使用hasRole时做什么,我的endpoint总是返回403。 此外,除非我在这两个和。很明显,我遗漏了一些东西。 基本上,我希望所有内容都需要身份验证,但只有当用户是某些组的成员时(现在只需要admin),少数endpoint才可以访问。 我的安全配置如下。旁边的一切都有效。 我的AuthenticationConfiguration如下 我的Authoriza