NOAUTH 需要身份验证。 Laravel + Redis

问题描述 投票:0回答:3

我收到错误NOAUTH 需要身份验证。 我的laravel版本是5.3,我使用predis 1.1.1连接redis。

在etc/redis/redis.conf中我有:

bind 127.0.0.1
requirepass somepassword

在 .env 文件中我有

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=somepassword
REDIS_PORT=6379

在 config/database.php 中我有:

'redis' => [

        'cluster' => false,

        'default' => [
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', 6379),
            'database' => 0,
        ],

我通过以下方式连接 Redis:

self::$_db = \Redis::connection('default');

并像这样使用它:

self::$_db->pipeline(function ($pipe) use ($profile, $time,$type, $id) {
            $pipe->zadd(self::getProfileKey($profile, $type), $time, $id);
            $pipe->zadd(self::getProfileKey($profile), $time, $type . ':' . $id);
            $pipe->zadd(self::getModelKey($type,$id) . '::favoritedBy', $time, $profile->profile_id);
        });

因此,当我注释掉

requirepass
并将密码发送为空时,它可以工作,但当密码就位时,它不起作用并抛出错误
NOAUTH Authentication required.
。根据我的项目要求,我需要设置密码。请帮忙。预先感谢。

redis laravel-5.3 predis
3个回答
19
投票

经过一番研究,我找到了解决这个问题的方法:

我们需要添加:

'options' => [
                'parameters' => ['password' => env('REDIS_PASSWORD', null)],
            ],

config
数组中。请参阅下面的完整示例:database.php

'redis' => [

        'cluster' => false,

        'default' => [
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', 6379),
            'database' => 3,
        ],
        'options' => [
            'parameters' => ['password' => env('REDIS_PASSWORD', null)],
        ],
    ],

在 .env 文件中:

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=mmdgreat
REDIS_PORT=6379

0
投票

我在 Symfony 中遇到了同样的错误,特别是

symfony/cache
。 问题是
REDIS_DSN
环境变量不包含密码信息,但 redis docker 容器需要密码。 所以改变这个:

REDIS_DSN=redis://<redis-host-name>:6379

到此

REDIS_DSN=redis://<redis-password>@<redis-host-name>:6379

Symfony 缓存配置:

framework:
    cache:
        default_redis_provider: '%env(REDIS_DSN)%'
        pools:
            my_cache_pool:
                adapter: cache.adapter.redis

在 PHP 中,您还可以通过这种方式检查凭据:

    $redis = new \Redis([
        'host' => 'redis-host-name',
        'port' => 6379,
        'auth' => 'redis-password',
    ]);

注意:我在堆栈溢出中没有找到 symfony 特定问题,因此决定在这里添加答案。


-3
投票

我通过降级 predis 解决了这个问题! :D

composer require predis/predis:0.8.4

我也在使用 Laravel 5.3! :)

© www.soinside.com 2019 - 2024. All rights reserved.