Laravel从两个不同的路由和视图中进行多重认证。

问题描述 投票:0回答:1

我想实现一个系统,其中有6种用户存在。其中一个是 "客户",他将通过类似于以下的途径登录 /login 其余5个用户都是管理员,只有他们会用另一个途径登录。/system/base-admin. 但是,'客户'从来没有用 /system/base-admin 路径,如果能知道这个路由。而且两个路由有不同的登录形式,如果他们登录失败,'customer'将被重定向到 /login 和管理员 /system/base-admin.

我知道$guard和中间件检查。

问题:我知道$guard和中间件检查。 我如何实现上述方案和如何反应专业人士与这种情况?

Route::get('/login','CustomerLoginController@processLogin')->name('customer.login');


Route::get('/system/base-admin', 'AdminLoginController@processAdminLogin')->name('system.admin')

我的控制器看起来像

public function processLogin(){ return view('customer.login');}

public function processAdminLogin(){ return view('admin.login')}

先谢谢你。

laravel authentication authorization laravel-7 laravel-authentication
1个回答
0
投票

我看到有不同的端点登录的唯一原因是有不同的视图。Auth\LoginController变化 $redirectTo 重定向到您的管理面板。覆盖 AuthenticatesUsers\showLoginForm 以显示您的管理表单和更新中间件,在 __construct.用管理中间件保护你所有的管理路由。

现在,。你的用户可以登录到你的面板。但是什么都不会发生,因为他们没有权限。

如果你想在他们尝试的时候给他们看一些信息,你可以重写以下内容 AuthenticatesUsers\login 这样的方法

...
if ($this->attemptLogin($request)) {
            if(!auth()->user()->isAdmin()){
               throw ValidationException::withMessages([
                 $this->username() => 'You don\'t have access to this page',
               ]);
            }
            return $this->sendLoginResponse($request);
        }
...
© www.soinside.com 2019 - 2024. All rights reserved.