Laravel 5中存在两种登录表单

3

我一直在考虑如何在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') }},却无法实现…

您可以更改 AuthenticateRedirectIfAuthenticated 中间件以检查 type 列。您还需要为管理员部分创建两个新的中间件。 - Jeemusu
每个公共和管理界面都会有一个中间件吗? - Jonathan Solorzano
是的,我通常在Middleware目录中创建一个Admin目录,将两个中间件复制到其中,并添加正确的命名空间。 - Jeemusu
1个回答

0

你听说过 Laravel中的Multiauth 吗?在这个库中,有两种或更多类型的用户可以登录到一个Laravel应用程序中。

在我们的情况下,有两种类型的用户管理员公共用户,也就是用户权限。你通过插入用户类型来识别用户,这是完全错误的,亲爱的。

你必须使用这个库,只需按照链接步骤安装库,并分配两个不同的表,比如在我们的情况下,在restaurant.com中,用户类型为Public,这意味着有一个简单的用户使用User表。

另一方面,对于管理员,在我们的情况下是restaurant.net。这个登录表单使用管理员表进行登录。

在一个应用程序中,忘记密码和重置密码功能都是分开工作的。

'multi' => [ 'admin' => [ 'driver' => 'database', 'table' => 'admin', 'email' => 'client.emails.password' ], 'users' => [ 'driver' => 'database', 'table' => 'users', 'email' => 'client.emails.password', ] ],

我会去查看并告诉你这是否是我正在寻找的东西。 - Jonathan Solorzano
我需要为公共和管理员分别使用不同的授权控制器吗? - Jonathan Solorzano
'multi' => [ 'admin' => [ 'driver' => '数据库', 'table' => '管理员', 'email' => '客户电子邮件密码' ], 'users' => [ 'driver' => '数据库', 'table' => '用户', 'email' => '客户电子邮件密码', ] ], - Jigs Virani
如果只有一个控制器,我如何限制公共用户只能输入public,管理员用户只能输入admin? - Jonathan Solorzano
我一直在阅读文档,但我不明白的是,我是否需要为每种类型的用户创建单独的表? - Jonathan Solorzano
显示剩余8条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接