Laravel - PasswordController :: getToken()不存在

时间:2016-06-07 14:10:21

标签: php laravel passwords

我在Laravel 5.2中重置密码,但我有两个问题。

1)用户提交电子邮件后,getSent的视图无法显示,只刷新电子邮件页面。

2)当我点击电子邮件中的链接时,我收到此错误

  

方法App \ Http \ Controllers \ Auth \ PasswordController :: getToken()   不存在

这是 passwordController 的代码,我不确定这是否足以帮助我,所以如果您需要任何其他代码,请告诉我。     

namespace App\Http\Controllers\Auth;

use View;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ResetsPasswords;

class PasswordController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Password Reset Controller
    |--------------------------------------------------------------------------
    |
    | This controller is responsible for handling password reset requests
    | and uses a simple trait to include this behavior. You're free to
    | explore this trait and override any methods you wish to tweak.
    |
    */

    use ResetsPasswords;

    /**
     * Create a new password controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest');
    }

    public function getSent()
    {
        return View::make('auth.passwordSent');
    }
}

编辑:这是我的路线

Route::group(['middleware' => ['web', 'csrf']], function () {

    Route::get('/password/reset/email', 'Auth\PasswordController@getEmail');
    Route::post('/password/reset/email', 'Auth\PasswordController@postEmail');

    Route::get('/password/reset/sent', 'Auth\PasswordController@getSent');

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

3 个答案:

答案 0 :(得分:3)

第一个问题是getSent应该是getSendResetLinkEmailSuccessResponse,因为这是特征中的方法,您可以覆盖:

public function getSendResetLinkEmailSuccessResponse()
{
    return View::make('auth.passwordSent');
}

第二个问题是您的路线映射到不存在的方法。您应该使用getToken

而不是showResetForm
Route::get('/password/reset/{token}', 'Auth\PasswordController@showResetForm');

如果您查看Illuminate \ Routing \ Router.php,您将看到正确的密码重置路由如下:

$this->get('password/reset/{token?}', 'Auth\PasswordController@showResetForm');
$this->post('password/email', 'Auth\PasswordController@sendResetLinkEmail');
$this->post('password/reset', 'Auth\PasswordController@reset');

您可以通过以下方式在routes.php中实现这些:

Route::auth();

答案 1 :(得分:0)

请原谅我,如果我错了,但这是我的一位同事用来解决同样问题的解决方案。

更改routes.php中的以下代码

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

Route::controllers([
    'auth' => '\App\Http\Controllers\Auth\AuthController',
    'password' => '\App\Http\Controllers\Auth\PasswordController',
]); 

希望这会有效,我没有测试当然。

答案 2 :(得分:0)

我在这里看到了几个问题。

首先,您提到您正在使用Laravel 5.2,但您显示的身份验证路由来自Laravel 5.1。这是一个从5.1升级的项目吗?

其次,从Laravel 5.1(并查看ResetsPasswords特征),您应该使用的控制器方法是getReset,而不是getToken

第三,如果您使用Laravel> = 5.2.27,则需要从组中删除web中间件,因为它已默认添加到路径文件中的所有路由