当尝试访问auth所需的中间件页面时,问题是'Route [login] not defined'
,我的登录路线未被调用' login'而且我不希望它被称为登录。
这是我的路线......
Route::group(['middleware' => 'auth', 'namespace' => 'User'], function() {
Route::get('/home', ['uses' => 'HomeController@getView', 'as' => 'frontend.user.home']);
});
Route::group(['middleware' => 'guest', 'namespace' => 'Guest'], function() {
Route::get('/login', ['uses' => 'LoginController@getView', 'as' => 'frontend.guest.login']);
Route::post('/login', ['uses' => 'LoginController@onPost', 'as' => 'frontend.guest.login']);
});
如何让它停止要求路线'登录'并开始要求我的自定义的' frontend.guest.login' ??
答案 0 :(得分:1)
首先,您应该修改以下路线名称:
Route::get('/login', ['uses' => 'LoginController@getView', 'as' => 'frontend.guest.login']);
Route::post('/login', ['uses' => 'LoginController@onPost', 'as' => 'frontend.guest.login']);
请注意,您已将frontend.guest.login
用于错误的两个(获取/发布)路由,而应使用唯一名称,例如:frontend.guest.get.login
用于Route::get()
和{{ 1}} frontend.guest.post.login
。
然后,在Route::post()
类中,创建/覆盖以下方法:
App\Exceptions\Handler
另外,使用课程顶部的protected function unauthenticated($request, AuthenticationException $exception)
{
return $request->expectsJson()
? response()->json(['message' => 'Unauthenticated.'], 401)
: redirect()->guest(route('frontend.guest.get.login'));
}
语句在use Illuminate\Auth\AuthenticationException;
中导入AuthenticationException
课程。
此外,将App\Exceptions\Handler
的每个用例更改为相应的路由名称,使用frontend.guest.login
进行表单提交/操作,并frontend.guest.post.login
显示表单或重定向。
答案 1 :(得分:0)
您必须编写下一个代码才能重定向到访客
public function __construct()
{
$this->middleware('guest')->except('logout');
}
然后在主页面中编写下一个代码
public function __construct()
{
$this->middleware('auth');
}
答案 2 :(得分:0)
这是因为Laravel的默认Authenticate
中间件抛出AuthenticationException
而Laravel的默认方式是处理此异常是为了这样做:
return $request->expectsJson()
? response()->json(['message' => $exception->getMessage()], 401)
: redirect()->guest(route('login'));
您会在unauthenticated
Illuminate\Foundation\Exceptions\Handler
方法中找到此代码,您的默认App\Exceptions\Handler
应该延伸。
只需在unauthenticated
课程中提供自己的App\Exceptions\Handler
方法,即可覆盖此行为。例如:
<?php
namespace App\Exceptions;
use Exception;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
class Handler extends ExceptionHandler
{
// The rest of your Handler class here...
public function unauthenticated()
{
// Add your implementation here
}
}