【发布时间】:2021-06-24 06:45:24
【问题描述】:
对于我的电子商务应用程序,我使用user 的默认保护并为控制面板admin 设置了另一个保护,但登录或注销user 也会影响管理控制面板中的状态,并且反之亦然。这是为什么呢?
这是我的授权文件:
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'admin' => [
'driver' => 'session',
'provider' => 'admins',
],
'user' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
'hash' => false,
],
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\Models\User::class,
],
'admins' => [
'driver' => 'eloquent',
'model' => App\Models\Admin::class,
],
这是我的管理员登录和注销控制器:
public function enter(AdminLogin $admin){
$credentials = $admin->only(['email', 'password']);
if(Auth::guard('admin')->attempt($credentials)):
$admin = ModelsAdmin::whereEmail($admin->email)->first();
Auth::login($admin);
return redirect()->route('dashboard.show');
endif;
return redirect()->back()->withMsg("There is A worng in your Credentials");
}
public function logout(){
auth('admin')->logout();
return redirect()->route('admin.login');
}
这是我的用户登录和注销:
public function enter(UserCheck $user){
$credentials = $user->only(['email', 'password']);
if(Auth::guard('user')->attempt($credentials)):
$login = ModelsUser::whereEmail($user->email)->first();
Auth::login($login);
return redirect()->route('user.dashboard');
endif;
return back()->withMsg('Sorry sir you Entered invalid Credentials');
}
public function logout(Request $request){
Auth::guard('user')->logout();
$request->session()->invalidate();
$request->session()->regenerateToken();
return redirect()->route('user.login');
}
【问题讨论】:
-
我认为
Auth::login($admin);和Auth::login($login);是不必要的。因为如果凭据有效,Auth::guard('admin')->attempt($credentials)和Auth::guard('user')->attempt($credentials)将创建会话。如果检查,您可以在内部重定向用户。 -
它在某些情况下有效,例如在管理面板中登录或注销不影响用户面板但显示管理面板应登录用户面板,即使管理员凭据为真
-
如何检查用户或管理员是否已登录?
-
@auth('admin')欢迎 {{auth('admin')->user()->name}}@endauth
-
@auth('user') @endauth
标签: laravel authentication logout guard