Laravel密码提醒 - 连接被拒绝61

时间:2014-12-19 22:45:29

标签: php email laravel nginx

我很难过。

我正在使用Laravel的密码::提醒,这已经为我编写了,所以我没有改变任何内容:

try {

        $reset = Password::remind($credentials);

    } catch (Exception $e) {

        throw new Exception($e->getMessage());
    }

当我提交表单时,我收到以下异常:

Exception

Connection could not be established with host localhost [Connection refused #61] 

指向我上面的抛出异常行

在我的app / config / mail.php文件中,我尝试了从邮件到sendmail,从localhost到smtp.gmail.com的所有内容 - 无论我在此配置文件中更改了什么,Laravel仍然认为它是localhost。甚至尝试了" / usr / sbin / sendmail -t -i"

我重新启动了apache和fpm - 错误没有改变。

当我尝试邮件(电子邮件,标题,消息)时 - 它工作得很好。当然,我的目标不仅仅是发送电子邮件,而是使用Laravel的密码::提醒功能,它会发送一封电子邮件,其中包含用户重置密码的链接。

我更改了/usr/local/etc/php/5.5/php.ini文件,包括smtp和smtp_port

我需要做什么,这在他们的文档中似乎是如此直接,并且没有其他人抱怨这个问题因为拒绝连接#61。还有其他连接遭到拒绝,他们与内置密码无关: :提醒。这让我疯了。

我正在运行fpm-nginx。

提前致谢

3 个答案:

答案 0 :(得分:0)

为了安全起见任何配置问题,我建议您在Homestead这样的封闭环境中试用您的应用程序。这样,即依靠新的虚拟机,您可能能够确定它是否是您正在使用的不同应用程序(apache,php等)级别的配置问题。否则,您将不得不重新检查您的代码。您可以在此处找到有关Homestead的更多信息:http://laravel.com/docs/4.2/homestead

答案 1 :(得分:0)

好的,有几个配置必须到位,我发布这个答案,以防其他人使用Yosemite有这个问题。

首先,从我搜索错误"连接被拒绝#61"这通常与Korush上面提到的与数据库的连接有关。但是,如果我输入的电子邮件不是数据库的一部分,Laravel会返回一条消息,说明找不到这样的电子邮件,告诉我它已连接到数据库,从搜索的角度来看已输入的电子邮件。

但是,如果一个人没有" password_reminders"在他们的localhost数据库中的表,然后一个人会收到连接拒绝错误 - 确保你有这个用于Laravel在你的localhost db中使用:

CREATE TABLE password_reminders (
 email VARCHAR(50) NOT NULL,
 token VARCHAR(100) NOT NULL,
 created_at TIMESTAMP
)

其次,Laravel可以使用您系统上的邮件服务器。就我而言,我正在使用Yosemite,它有" postfix"终端提供:

sudo postfix start

这是我的本地配置,允许Laravel使用" password_reminders" table,位于app / config / database.php:

    'local' => array(
        'driver'    => 'mysql',
        'host'      => 'localhost',
        'database'  => 'yourdb',
        'username'  => 'yourusername',
        'password'  => 'yourpassword',
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
    ), 

在app / config / mail.php中:

'driver' => 'smtp',
'host' => 'localhost',
'port' => 25,
'from' => array('address' => 'service@yourdomain.com', 'name' => 'Your Company'),
'encryption' => '',
'username' => null,
'password' => null,
'sendmail' => '/usr/sbin/sendmail -bs',
'pretend' => false,

我仍然需要弄清楚如何显示重定向和消息,但这适用于通过电子邮件发送重置密码的链接:

public function request()
{
    $message = "";
    $session = null;

    $request = array('email' => Input::get('USER_EMAIL'));

    Password::remind(Input::only('USER_EMAIL'), function($message)
    {
        $message->subject('Password Reminder');
    });

    if ($request == 'reminders.sent') {

        $session = 'message';
        $success = true;
        $message = 'Email with further instruction has been sent to "' . Input::get('USER_EMAIL'). '".';
        return Password::remind($request);
    } elseif ($request == 'reminders.user') {

        $session = 'error';
        $success = false;
        $message = 'Email Address: ' . Input::get('USER_EMAIL') . ' WAS NOT FOUND!';
        return Password::remind($request);
    }else{
        $message = 'Not meeting either condition "' . Input::get('USER_EMAIL') . '".';
        return Password::remind($request);
    }

    Session::flash($session, $message);
    return Redirect::to('/').with($session, $message);

}

以下是与密码提醒相关的路线:

Route::get('password/reset', array(
 'uses' => 'PasswordController@remind',
 'as' => 'password.remind'
));

Route::post('password/reset', array(
 'uses' => 'PasswordController@request',
 'as'   => 'password.request'
));

Route::get('password/reset/{token}', array(
 'uses' => 'PasswordController@reset',
 'as' => 'password.reset'
));

Route::post('password/reset/{token}', array(
 'uses' => 'PasswordController@update',
 'as' => 'password.update'
));

答案 2 :(得分:-1)

也许它正在尝试发送电子邮件,但它无效。