【发布时间】:2018-09-22 16:24:28
【问题描述】:
我正在编写用户在单独页面中接受条款和条件的逻辑,这是工作流程。
- 用户已登录
- 如果他们尚未接受最新的条款和条件,请向他们展示
/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.
我猜它与中间件有关。有什么想法吗?
更新
// 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);
}
}
【问题讨论】:
-
您能否分享您的页面目录以及您在 LoginController 中所做的更改。
-
更新了我的问题!
-
不要忘记控制器,它是弄清楚它为什么会在其中损坏的重要部分。
标签: php laravel authentication middleware