[英]Laravel routes: Breaking when hitting a route in auth middleware
我在單獨的頁面中編寫了用戶接受條款和條件的邏輯,這是工作流程。
/welcome
頁面。 /accept
我設置了以下路線:
Auth::routes();
// Temp
Route::get('/', function () {
return redirect('/login');
});
Route::get('/logout', 'Auth\LoginController@logout');
Route::post('password/reset/{token}', 'Auth\ResetPasswordController@postReset')->name('password.request');
// Auth middleware
Route::group(['middleware' => ['auth']], function () {
// Temp
Route::get('/discovery', function () {
return view('pages.discovery');
});
// Temp
Route::get('/welcome', function () {
return view('pages.welcome');
});
Route::get('/accept', 'Auth\LoginController@accept');
});
問題是,當用戶登錄后,重定向到/welcome
頁面,而不是他們單擊“接受”按鈕重定向到/accept
路由,然后它與常見消息“ Sorry, the page you are looking for could not be found.
一起中斷, Sorry, the page you are looking for could not be found.
我猜它與中間件有關。 有任何想法嗎?
更新
// Auth middleware
Route::group(['middleware' => ['auth']], function () {
Route::get('/accept', 'Auth\LoginController@accept')->name('terms.accept');
Route::get('/welcome', function () {
return view('pages.welcome');
});
Route::group(['middleware' => ['terms']], function () {
Route::get('/discovery', function () {
return view('pages.discovery');
});
});
});
這是中間件:
class TermsMiddleware
{
/**
* @var UserService
*/
protected $userService;
/**
* TermsMiddleware constructor.
* @param UserService $userService
*/
public function __construct(UserService $userService)
{
$this->userService = $userService;
}
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (!$this->userService->hasAcceptedTerms()) {
return redirect('/welcome');
}
return $next($request);
}
}
Auth::routes();
Route::get('/', function () {
return redirect('/login');
});
Route::get('/logout', 'Auth\LoginController@logout');
Route::post('password/reset/{token}', 'Auth\ResetPasswordController@postReset')->name('password.request');
Route::group(['middleware' => ['auth']], function () {
Route::get('/accept', 'Auth\LoginController@accept')->name('get.accept');
Route::group(['middleware' => ['terms']], function () {
Route::get('/discovery', function () {
return view('pages.discovery');
});
Route::get('/welcome', function () {
return view('pages.welcome');
});
});
});
php artisan make:middlware條款
<?php
namespace YourNamespace;
use Closure;
class Terms
{
public function handle( $request, Closure $next, $guard = null )
{
if( ! $request->user()->accepts_terms ) {
return redirect( route( 'get.accept' ) );
}
return $next( $request );
}
}
添加到您的HTTP內核routeMiddleware,'terms'=> YourNewTermsMiddleware :: class
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.