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 函数,如 getLogingetRegister 以及 $loginPath$redirectTo 等变量,但在登录表单中调用 publicPostLogin(结帐路线)时有作为行动 route('publicPostLogin') 的公共的,它只是不起作用......

【问题讨论】:

您可以更改 AuthenticateRedirectIfAuthenticated 中间件以检查 type 列。您还需要为管理部分创建两个新的中间件。 每个公共和管理员是否会有一个中间件? 是的,我通常在Middleware 目录中创建一个Admin 目录,然后将两个中间件复制到那里并添加正确的命名空间。 【参考方案1】:

你听说过Multiauth in laravel。在这个库中,有两种或多种类型的用户可以登录一个 laravel 应用程序。 在我们的例子中,有两种类型的用户 AdminPublic,这意味着用户权限。亲爱的,你通过插入用户类型来识别用户,这是完全错误的。

你必须使用这个库。只需按照链接步骤安装库。并分配两个不同的表,就像我们在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.2 在同一页面上登录和注册表单

Laravel 5.4 - 在已经登录的情况下创建另一个用户帐户

Laravel 中的注册和登录表单不起作用

Laravel 5.2 Auth 登录有效,Auth::check 失败

在 Laravel 中从同一网页发布两个表单

Laravel 5.5 阻止表单提交按 Enter