我一直在考虑如何在Laravel 5中制作两个登录表单……原因是我有一个多站点项目,其中包含管理站点和公共站点。
我已经将路由分组,使得管理站点的路由响应于一个域名,而公共站点的路由响应于另一个域名,就像这样:
Route::group(array( 'domain' => 'restaurant.com', 'namespace' => 'Public' ), function () {
//some routes
});
Route::group(array( 'domain' => 'restaurant.net', 'namespace' => 'Admin' ), function () {
//some routes
});
我还为每个路由组创建了自定义的身份验证路由,例如这样(下面的代码是用于公共页面的):
(示例代码略)
Route::controllers([
'auth' => 'Auth\AuthController',
'password' => 'Auth\PasswordController',
]);
Route::get( '/register' , [
'as' => 'publicRegister' ,
'uses' => 'Auth\AuthController@getRegister'
] );
Route::post( '/registrar' , [
'as' => 'publicPostRegister' ,
'uses' => 'Auth\AuthController@postRegister'
] );
Route::get( '/login' , [
'as' => 'publicLogin' ,
'uses' => 'Auth\AuthController@getLogin'
] );
Route::post( '/login' , [
'as' => 'publicPostLogin' ,
'uses' => 'Auth\AuthController@postLogin'
] );
Route::get( '/logout' , [
'as' => 'publicLogout' ,
'uses' => 'Auth\AuthController@getLogout'
] );
我还创建了一个名为“Auth”的文件夹,并在每个父文件夹中添加了它的控制器('AuthController
','PasswordController
'),我的控制器如下:
app
|---Http
|---Controllers
|----------Public
| |---Auth
| | |---AuthController
| | |---PasswordController
| |--- ...
|
|----------Admin
|---Auth
| |---AuthController
| |---PasswordController
|--- ...
所以,对于我拥有的视图,我有单独的认证视图,如下所示:
resources
|---views
|----------Public
| |---Auth
| | |---login.blade.php
| | |---password.blade.php
| | |---register.blade.php
| | |---reset.blade.php
| |--- ...
|
|----------Admin
|---Auth
| |---login.blade.php
| |---password.blade.php
| |---register.blade.php
| |---reset.blade.php
|--- ...
在我的模型中,用户表有一个“类型”列,用于将用户从公共或管理员站点筛选出来。 主要问题是:如何为我的项目创建两个登录表单? 我希望公共用户不能登录到管理员站点,反之亦然。
目前我尝试重写AuthenticatesAndRegistersUsers函数,例如getLogin、getRegister,还有变量如$loginPath和$redirectTo。但是,在Public的登录表单中调用publicPostLogin(检查路由),其操作为{{ route('publicPostLogin') }},却无法实现…
Authenticate
和RedirectIfAuthenticated
中间件以检查 type 列。您还需要为管理员部分创建两个新的中间件。 - JeemusuMiddleware
目录中创建一个Admin
目录,将两个中间件复制到其中,并添加正确的命名空间。 - Jeemusu