【问题标题】:reset password does not work with mailgun configuration重置密码不适用于 mailgun 配置
【发布时间】:2016-05-03 20:42:15
【问题描述】:

我根据mail docs配置了laravel 5.1。发送邮件工作正常。

下一步是根据resetting passwords docs 添加重置密码。在这里,我很难将链接发送到重置密码公式。

似乎没有触发发送重置邮件的功能。我也检查了config/mail.php 配置pretend = true;。日志文件中没有发送电子邮件的条目。

不知何故,它也很难调试,因为我找不到触发重置电子邮件的功能。

  1. 如何使用 mailgun 发送重置密码?
  2. 发送重置密码的函数定位在哪里,或者我可以在哪里覆盖它来测试它?

这是我的配置:

.env

# ...
MAIL_DRIVER=mailgun
MAIL_HOST=smtp.mail.org
MAIL_PORT=587
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAILGUN_DOMAIN=mg.foo.com
MAILGUN_SECRET=key-foobar.etc
# ....

config/service.php

//...
'mailgun' => [
    'domain' => env('MAILGUN_DOMAIN'),
    'secret' => env('MAILGUN_SECRET'),
],
//...

配置/mail.php

// ...
'driver' => env('MAIL_DRIVER', 'smtp'),
'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
'port' => env('MAIL_PORT', 587),
'from' => ['address' => 'foo@test.com', 'name' => 'foo'],
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
'pretend' => false,
// ...

app/Http/routes.php

// ...
Route::group([
    'prefix' => LaravelLocalization::setLocale(),
    'middleware' => [ 'localeSessionRedirect', 'localizationRedirect' ]
    ], function() {

    //Route::controllers([ 'password' => 'Auth\PasswordController', ]);

    // works only if the user is logged out!!!1
    // Password reset link request routes...
    Route::get('password/email', 'Auth\PasswordController@getEmail');
    Route::post('password/email', 'Auth\PasswordController@postEmail');

    // Password reset routes...
    Route::get('password/reset/{token}', 'Auth\PasswordController@getReset');
    Route::post('password/reset', 'Auth\PasswordController@postReset');
});
//...

resources/views/auth/password.blade.php

@extends('layout')

@section('content')
<div class="container">
    <form method="POST" action="/password/email">
        {!! csrf_field() !!}

        @if (count($errors) > 0)
            <ul>
                @foreach ($errors->all() as $error)
                    <li>{{ $error }}</li>
                @endforeach
            </ul>
        @endif
    <div class="row">
        <div class="col-md-6">
            {!! Form::label('email', trans( 'mes.email' )) !!}
            <input type="email" name="email" value="{{ old('email') }}" class="form-control">
        </div>
        <div class="col-md-8">
            <button type="submit" class="btn">
                Send Password Reset Link
            </button>
        </div>
    <div>

    </form>
</div>
@endsection

【问题讨论】:

    标签: authentication laravel-5.1 reset mailgun password-recovery


    【解决方案1】:

    不正确的路线是问题所在。文档中的示例确实在 form 元素中硬编码了 action 值。

    这并没有反映我的路线配置。通过以下更改,密码重置电子邮件有效:

    app/Http/路由

    // change route to a named route
    // Route::post('password/email', 'Auth\PasswordController@postEmail');
    Route::post('password/email', ['as' => 'password.email', 'uses' => 'Auth\PasswordController@postEmail']);
    

    resources/views/auth/password.blade.php

    <!-- Use the named route in the form builder and remove csrf_field -->
    {!! Form::open(['route' => 'password.email']) !!}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多