我在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');
});
答案 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
中间件,因为它已默认添加到路径文件中的所有路由