namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Illuminate\Support\Facades\Auth;
class User extends Authenticatable
{
use HasFactory, Notifiable;
protected $guarded = [];
protected $hidden = [
'password',
'remember_token',
];
protected $casts = [
'email_verified_at' => 'datetime',
];
public function isAdmin()
{
return Auth::guard('admin')->check();
}
public function isCustomer()
{
return Auth::guard('customer')->check();
}
public function guard()
{
if ($this->isAdmin()) {
return 'admin';
}
return 'customer';
}
}
2条答案
按热度按时间6tr1vspr1#
是的,这是可能的。2你应该创建两个不同的LoginControllers和指定的路由,创建两个不同的Auth中间件,可能还要稍微修改一下RedirectIfAuthenticated中间件。
在这两个LoginController中,您应该像这样定义您的保护:
如果您希望为您的防护设备分离路由,而不是在RedirectIfAuthenticated Middleware中,您应该为两个防护设备定义重定向
gr8qqesn2#
在Laravel的一个型号中使用两个防护装置
首先,您需要在
config/auth.php
文件中定义保护。例如,假设您要定义两个保护:customer
和admin
。可以按如下方式定义它们:接下来,需要为每个
guard
定义providers
。提供程序负责从数据库中检索用户。
可以在同一个
config/auth.php
文件中定义它们,如下所示:请注意,我们对两个guard使用相同的
User model
和users table
,但我们根据用户的role column
筛选用户。最后,您需要更新您的
User
模型以使用Authenticatable
trait,并为每个模型示例指定guard。下面是一个用户模型的示例:在本例中,我们添加了两个方法来检查用户是否属于某个特定的守卫(
isAdmin()
和isCustomer()
),以及一个guard()
方法来为每个模型示例指定守卫。现在可以使用
auth()->guard('customer')->attempt($credentials)
或auth()->guard('admin')->attempt($credentials)
方法验证用户,使用auth()->guard('customer')->user()
或auth()->guard('admin')->user()
方法检索已验证的用户。