php-Laravel 5.1-如何在AuthController中设置loginPath?
作者:互联网
我想将默认的Laravel路由从/ auth / login更改为/ login并通过注册进行可视化.
这些是我的路线:
Route::get('login', ['as' => 'getLogin', 'uses' => 'Auth\AuthController@getLogin']);
Route::post('login', ['as' => 'postLogin', 'uses' => 'Auth\AuthController@postLogin']);
Route::get('logout', ['as' => 'getLogout', 'uses' => 'Auth\AuthController@getLogout']);
Route::get('register', ['as' => 'getRegister', 'uses' => 'Auth\AuthController@getRegister']);
Route::post('register', ['as' => 'postRegister', 'uses' => 'Auth\AuthController@postRegister']);
现在出现了问题,当用户尝试访问受保护的区域时,将启动Authentication类,将未经身份验证的用户重定向回/ auth / login而不是/ login.
我可以通过在AuthController中设置$loginPath来解决问题,如下所示:
protected $loginPath = '/login';
但是,似乎$loginPath仅用于失败的登录尝试,而不是失败的身份验证尝试,如AuthenticateUsers类中所述.
好吧,我设法从此更改了Authenticate类中的redirectURL:
return redirect()->guest('auth/login');
对此:
return redirect()->guest('login');
哪个解决了问题,但我想在我的AuthController中为此设置一个属性,如下所示:
protected $redirectIfMiddlewareBlocks = '/login';
为此,我检查Authenticate类是否存在属性,该属性是我之前在AuthController中设置的:
return redirect()->guest(property_exists($this, 'redirectIfMiddlewareBlocks') ? $this->redirectIfMiddlewareBlocks : '/shouldnotbeused');
但是我得到了/ shouldnotbeused url,而不是AuthController中的redirectIfMiddlewareBlocks属性设置的URL.
如何在AuthController中正确设置登录路由的路径?
解决方法:
我认为问题在于您正在检查错误的类上的属性.您正在检查它是否存在于$this上,它是在AuthController上设置时Authenticate的一个实例
因此,您应该将支票更改为:
property_exists(AuthController::class, 'redirectIfMiddlewareBlocks')
同样,您不能从另一个类访问受保护的属性.如果要这样做,则必须将其公开.最后,我将其设置为静态,以便您无需实例化AuthController对象即可访问它.因此,最终的解决方案是:
class AuthController {
public static $redirectIfMiddlewareBlocks = '/here';
}
在您的身份验证中间件中:
use App\Http\Controllers\AuthController;
class Authenticate {
public function handle()
{
return redirect()->guest(property_exists(AuthController::class, 'redirectIfMiddlewareBlocks') ? AuthController::$redirectIfMiddlewareBlocks : '/shouldnotbeused');
}
}
标签:laravel,laravel-5,authentication,php 来源: https://codeday.me/bug/20191119/2037139.html