laravel 5中的两个登录表单
Posted
技术标签:
【中文标题】laravel 5中的两个登录表单【英文标题】:Two login forms in laravel 5 【发布时间】:2015-11-03 04:13:08 【问题描述】:我一直想知道如何在 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'
] );
我还在每个父文件夹中创建了带有控制器('AuthController
'、'PasswordController
')的 Auth 文件夹,我的控制器是这样的:
app
|---Http
|---Controllers
|----------Public
| |---Auth
| | |---AuthController
| | |---PasswordController
| |--- ...
|
|----------Admin
|---Auth
| |---AuthController
| |---PasswordController
|--- ...
所以对于视图,我有单独的 Auth 视图,如下所示:
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
|--- ...
在我的模型中,users 表有一个 type 列,它将过滤来自公共或管理站点的用户。 这里的主要问题是:我如何为我的项目制作两个登录表单? 我想要的是公共用户无法登录管理站点,反之亦然。
到目前为止,我尝试的是覆盖 AuthenticatesAndRegistersUsers
函数,如 getLogin
、getRegister
以及 $loginPath
、$redirectTo
等变量,但在登录表单中调用 publicPostLogin
(结帐路线)时有作为行动 route('publicPostLogin')
的公共的,它只是不起作用......
【问题讨论】:
您可以更改Authenticate
和 RedirectIfAuthenticated
中间件以检查 type 列。您还需要为管理部分创建两个新的中间件。
每个公共和管理员是否会有一个中间件?
是的,我通常在Middleware
目录中创建一个Admin
目录,然后将两个中间件复制到那里并添加正确的命名空间。
【参考方案1】:
你听说过Multiauth in laravel。在这个库中,有两种或多种类型的用户可以登录一个 laravel 应用程序。 在我们的例子中,有两种类型的用户 Admin 和 Public,这意味着用户权限。亲爱的,你通过插入用户类型来识别用户,这是完全错误的。
你必须使用这个库。只需按照链接步骤安装库。并分配两个不同的表,就像我们在restaurant.com
的例子中一样,用户类型是公共的,这意味着有一个简单的用户使用用户表。
另一方面,在我们的例子中,管理员是restaurant.net
。这个登录表单使用管理员表登录。
忘记密码和重置密码功能在一个应用程序中单独工作。
'multi' => [ 'admin' => [ 'driver' => 'database', 'table' => 'admin', 'email' => 'client.emails.password' ], 'users' => [ 'driver' => 'database', 'table' => 'users', 'email' => 'client.emails.password', ] ],
【讨论】:
只有一张 users 表吧?我会检查一下,它是否处理公共和管理员登录的限制? 是的,有用户表。是的,两者都可以绝对限制。 我会检查并告诉你这是否是我要找的 每个公共和管理员需要不同的身份验证控制器吗? 不,您只需按照上述库链接中的建议在身份验证文件中定义两个表。以上是关于laravel 5中的两个登录表单的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 5.4 - 在已经登录的情况下创建另一个用户帐户